Я пытаюсь параметризовать мой Dockerfile, выполняющий nodeJS, чтобы можно было настраивать аргументы моей команды точки входа на docker run
, чтобы я мог поддерживать один контейнерный артефакт, который можно многократно развертывать с изменениями для некоторых аргументов времени выполнения.
Я пробовал несколько разных способов, самым основным из которых является
ENV CONFIG_FILE=default.config.js
ENTRYPOINT node ... --config ${CONFIG_FILE}
Я обнаружил, что любое значение по умолчанию остается в моей команде docker run
, даже если я использую -e
перейти в новые значения.Например,
docker run -e CONFIG_FILE=desired.config.js
Еще одна форма Dockerfile, которую я пробовал, такова:
ENTRYPOINT node ... --config ${CONFIG_FILE:-default.config.js}
Не указывается переменная окружения с помощью директивы ENV
, но используется расширение bash для указания значения по умолчаниюзначение, если несуществующий или ноль найден.Это дает мне такое же поведение, хотя.
Наконец, последнее, что я попытался, это создать файл сценария bash, содержащий ту же команду точки входа, затем ADD
в контекст докера и вызвать его в моем ENTRYPOINT
.И это также, кажется, дает такое же поведение.
Возможно ли то, что я пытаюсь сделать?
РЕДАКТИРОВАТЬ:
Вот минимальный докер-файл, который воспроизводит для меня это поведение:
FROM alpine
ENV CONFIG "no"
ENTRYPOINT echo "CONFIG=${CONFIG}"
Вот команда построения:
docker build -f test.Dockerfile -t test .
Вот команда запуска, которая повторяет no
несмотря на -e
arg:
docker run -t test -e CONFIG=yes
Некоторые дополнительные сведения, я запускаю OSX sierra
с версией Docker 18.09.2, build 6247962