development

Dockerfile CMD 내에서 변수를 어떻게 사용할 수 있습니까?

big-blog 2020. 11. 11. 20:22
반응형

Dockerfile CMD 내에서 변수를 어떻게 사용할 수 있습니까?


내 Dockerfile 내부 :

ENV PROJECTNAME mytestwebsite
CMD ["django-admin", "startproject", "$PROJECTNAME"]

오류:

CommandError: '$PROJECTNAME' is not a valid project name

여기서 가장 빠른 해결 방법은 무엇입니까? Docker는 이후 버전의 Docker에서이 기능을 "수정"하거나 도입 할 계획이 있습니까?

참고 : Docker 파일에서 CMD 줄을 제거한 다음 Docker 컨테이너를 실행하면 컨테이너 내부에서 Django-admin startproject $ PROJECTNAME을 수동으로 실행할 수 있으며 프로젝트가 생성됩니다.


다음과 같이 실행 목록을 사용할 때 ...

CMD ["django-admin", "startproject", "$PROJECTNAME"]

... 그러면 Docker는 셸을 사용하지 않고 주어진 명령을 직접 실행합니다 . 관련된 셸이 없기 때문에 다음을 의미합니다.

  • 변수 확장 없음
  • 와일드 카드 확장 없음
  • 없음 I / O 리디렉션 >, <, |, 등
  • 다음을 통한 여러 명령 없음 command1; command2
  • 기타 등등.

당신이 원하는 경우 CMD확장 변수를, 당신은 쉘을 준비해야합니다. 다음과 같이 할 수 있습니다.

CMD ["sh", "-c", "django-admin startproject $PROJECTNAME"]

또는 실행 목록 대신 간단한 문자열을 사용하여 이전 예제와 거의 동일한 결과를 얻을 수 있습니다.

CMD django-admin startproject $PROJECTNAME

컨테이너 내부에서 Java 프로세스를 시작한다고 가정 해 보겠습니다.

Dockerfile 발췌 예 :

ENV JAVA_OPTS -XX +UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 -XshowSettings:vm 
... 
ENTRYPOINT ["/sbin/tini", "--", "entrypoint.sh"] 
CMD ["java", "${JAVA_OPTS}", "-myargument=true"]

예제 entrypoint.sh 발췌 :

#!/bin/sh 
... 
echo "*** Startup $0 suceeded now starting service using eval to expand CMD variables ***"
exec su-exec mytechuser $(eval echo "$@")

런타임에 ENV값을 사용하려면 Dockerfile. 빌드 할 때 사용하려면 ARG.

예 :

ARG value
ENV envValue=$value
CMD ["sh", "-c", "java -jar ${envValue}.jar"]

빌드 명령에 값을 전달하십시오.

docker build -t tagName --build-arg value="jarName"

참고 URL : https://stackoverflow.com/questions/40454470/how-can-i-use-a-variable-inside-a-dockerfile-cmd

반응형