반응형
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
반응형
'development' 카테고리의 다른 글
AngularJS : 딥 링크로 $ locationProvider.html5Mode를 활성화하는 방법 (0) | 2020.11.11 |
---|---|
위치 고정 너비 100 % (0) | 2020.11.11 |
테이블 레이아웃이있는 테이블 : 고정; (0) | 2020.11.11 |
엔터티 프레임 워크 코드는 먼저 "구별 자"열을 만듭니다. (0) | 2020.11.11 |
void_t "개념을 구현할 수 있습니까?" (0) | 2020.11.11 |