Использовать переменные среды в CMD
Можно ли использовать переменные среды в моей строфе CMD в файле Docker?
Я хочу сделать что-то вроде этого:
CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]
Если $MEMCACHE_11211_TCP_ * будет автоматически установлен путем включения параметра -link моей команды docker run
. И $ARG будет настраиваться пользователем во время выполнения, может быть, с помощью параметра -e?
Это, кажется, не работает для меня, оно, кажется, буквально проходит через строку "$ ARG", например.
Ответы
Ответ 1
Этот ответ может быть немного запоздалым. Но среда для CMD
интерпретируется несколько иначе в зависимости от того, как вы пишете аргументы. Если вы передаете CMD
как строку (не внутри массива), она запускается как оболочка вместо exec. См. https://docs.docker.com/engine/reference/builder/#cmd.
Вы можете попробовать CMD
без синтаксиса массива для запуска в качестве оболочки:
CMD myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT
Ответ 2
CMD ["sh", "-c", "echo ${MY_HOME}"]
Ответ от sffits здесь.
Ответ 3
И у Andys было все правильно. Синтаксис json обходит точку входа. Когда вы используете CMD как в своем примере, он рассматривается как аргумент точки входа по умолчанию: /bin/sh -c
, которая будет интерпретировать переменные environement.
Докер не оценивает переменные в CMD в любом случае. В первом случае команда вызывается непосредственно, поэтому ничто не интерпретируется, а в дальнейшем переменные интерпретируются sh
.
Ответ 4
Я не могу говорить о том, как он должен работать, но я думаю, если вы назвали это оболочкой script, например. CMD runmyserver.sh
, тогда интерпретация переменных оболочки будет отложена до тех пор, пока CMD не будет работать.
Итак, попробуйте
myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT``
как оболочка script?