CMD에서 환경 변수 사용


84

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

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

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

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

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

답변:


59

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


11

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

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


7

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

그래서 시도

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

쉘 스크립트로?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.