Подтвердить что ты не робот

Использовать переменные среды в 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", например.

4b9b3361

Ответ 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?