[environment-variables] CMD에서 환경 변수 사용

Dockerfile의 CMD 스탠자에서 환경 변수를 사용할 수 있습니까?

다음과 같이하고 싶습니다.

CMD ["myserver", "--arg=$ARG", "--memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT"]

$ MEMCACHE_11211_TCP_ *는 내 docker run명령 의 –link 매개 변수를 포함하여 자동으로 설정됩니다 . 그리고 $ ARG는 런타임에 사용자가 “-e”매개 변수로 구성 할 수 있습니까?

이것은 나를 위해 작동하지 않는 것 같습니다. 예를 들어 문자 그대로 “$ ARG”문자열을 통과하는 것 같습니다.



답변

이 답변은 조금 늦을 수 있습니다. 그러나 환경 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


답변

CMD ["sh", "-c", "echo ${MY_HOME}"]

여기 sffits의 답변 .


답변

앤디 둘 다 옳았다. json 구문은 진입 점을 우회합니다. 예제에서와 같이 CMD를 사용하는 /bin/sh -c경우 환경 변수를 해석하는 기본 진입 점에 대한 인수로 간주됩니다 .

Docker는 두 경우 모두 CMD의 변수를 평가하지 않습니다. 전자에서는 명령이 직접 호출되어 아무것도 해석되지 않고 나중에 변수가 sh.


답변

나는이 방법으로 말할 수없는 가정 예를 들어, 일에,하지만 당신은 쉘 스크립트로이라고하면 생각 CMD runmyserver.sh, 쉘 변수의 다음 해석은 CMD 실제로 실행까지 연기 될 것이다.

그래서 시도

myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT``

쉘 스크립트로?


답변