Используйте переменную среды времени сборки в Docker CMD

#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.