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
답변
답변
앤디 둘 다 옳았다. json 구문은 진입 점을 우회합니다. 예제에서와 같이 CMD를 사용하는 /bin/sh -c
경우 환경 변수를 해석하는 기본 진입 점에 대한 인수로 간주됩니다 .
Docker는 두 경우 모두 CMD의 변수를 평가하지 않습니다. 전자에서는 명령이 직접 호출되어 아무것도 해석되지 않고 나중에 변수가 sh
.
답변
나는이 방법으로 말할 수없는 가정 예를 들어, 일에,하지만 당신은 쉘 스크립트로이라고하면 생각 CMD runmyserver.sh
, 쉘 변수의 다음 해석은 CMD 실제로 실행까지 연기 될 것이다.
그래서 시도
myserver --arg=$ARG --memcache=$MEMCACHE_11211_TCP_ADDR:$MEMCACHE_11211_TCP_PORT``
쉘 스크립트로?