#docker #environment-variables
#docker #переменные среды
Вопрос:
У меня есть Dockerfile:
...
COPY ${JAR_FILENAME}-*.jar /${JAR_FILENAME}.jar
...
CMD java -jar $(echo /${JAR_FILENAME}.jar)
И я создаю образ с помощью: docker build --build-arg JAR_FILENAME='some-file' -t some-name:tag
Но когда я запускаю контейнер, я получаю:
Error: Unable to access jarfile /.jar
Как мне передать переменные среды во время сборки моей CMD
команде, чтобы я мог работать java -jar some-file.jar
?
Ответ №1:
Вы используете ENV, устанавливая для него значение аргумента. ENV почти идентичен аргументу, но сохраняется в метаданных изображения и, следовательно, сохраняется при запуске контейнера.
...
ARG JAR_FILENAME=app.jar
ENV JAR_FILENAME=${JAR_FILENAME}
COPY ${JAR_FILENAME}-*.jar /${JAR_FILENAME}.jar
...
CMD java -jar /${JAR_FILENAME}.jar
Обратите внимание, что пользователи образа могут изменять значения ENV, и может быть проще просто присвоить jar в изображении хорошо известное имя:
...
COPY ${JAR_FILENAME}-*.jar /app.jar
...
CMD java -jar /app.jar
Комментарии:
1. Я был слеп. Почему я не использовал общее имя файла, как
app.jar
в первую очередь… В любом случае всегда полезно знать, как я могу это сделать, так что спасибо.
Ответ №2:
Используйте ARG
конструкцию в файле Docker для передачи аргументов времени сборки из командной строки.
Прочитайте документы по адресу: https://docs.docker.com/engine/reference/builder/#arg
Комментарии:
1. Привет. Спасибо за ответ. Это не то, что я ищу.
2. Я вижу, получил триггер счастливым — я бы согласился с ответом @BMitch.