Programing

ENTRYPOINT 배열에서 Docker 환경 변수를 어떻게 사용합니까?

crosscheck 2020. 10. 14. 07:29
반응형

ENTRYPOINT 배열에서 Docker 환경 변수를 어떻게 사용합니까?


환경 변수를 설정하면라고 말하고 다음 ENV ADDRESSEE=world과 같이 고정 문자열로 연결된 진입 점 스크립트에서 사용하고 싶습니다.

ENTRYPOINT ["./greeting", "--message", "Hello, world!"]

world환경 varible의 가치, 어떻게 그것을해야합니까? 나는 사용해 "Hello, $ADDRESSEE"보았지만 $ADDRESSEE문자 그대로 걸리기 때문에 작동하지 않는 것 같습니다 .


ENTRYPOINT exec 형식사용하고 있습니다. 달리 쉘 형태간부 인 형태는 명령 쉘을 호출하지 않습니다. 이것은 정상적인 쉘 처리가 발생하지 않음을 의미합니다. 예를 들어, ENTRYPOINT [ "echo", "$HOME" ]$ HOME에서 변수 대체를 수행하지 않습니다. 쉘 처리를 원하는 경우 쉘 양식을 사용 하거나 쉘을 직접 실행하십시오 (예 :) ENTRYPOINT [ "sh", "-c", "echo $HOME" ].
exec 형태를 사용하고 셸을 직접 실행하면 셸 형태의 경우와 같이 docker가 아닌 환경 변수 확장을 수행하는 셸입니다. ( Dockerfile 참조에서 )

귀하의 경우에는 쉘 형태를 사용 합니다.

ENTRYPOINT ./greeting --message "Hello, $ADDRESSEE\!"

제안 된 답변으로 해결하려고했지만 여전히 몇 가지 문제가 발생했습니다 ...

이것은 내 문제에 대한 해결책이었습니다.

ARG APP_EXE="AppName.exe"
ENV _EXE=${APP_EXE}

# Build a shell script because the ENTRYPOINT command doesn't like using ENV
RUN echo "#!/bin/bash \n mono ${_EXE}" > ./entrypoint.sh
RUN chmod +x ./entrypoint.sh

# Run the generated shell script.
ENTRYPOINT ["./entrypoint.sh"]

특히 문제를 대상으로 :
RUN echo "#!/bin/bash \n ./greeting --message ${ADDRESSEE}" > ./entrypoint.sh
RUN chmod +x ./entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]


많은 고통과 위의 @vitr 등의 큰 도움 끝에 나는 시도하기로 결정했습니다.

  • 표준 bash 대체
  • 쉘 형태엔트리 포인트 (위에서 큰 팁)

그리고 그것은 작동했습니다.

ENV LISTEN_PORT=""

ENTRYPOINT java -cp "app:app/lib/*" hello.Application --server.port=${LISTEN_PORT:-80}

예 :

docker run --rm -p 8080:8080 -d --env LISTEN_PORT=8080 my-image

docker run --rm -p 8080:80 -d my-image

둘 다 내 컨테이너에서 포트를 올바르게 설정했습니다.

참조

참조 https://www.cyberciti.biz/tips/bash-shell-parameter-substitution-2.html를

참고 URL : https://stackoverflow.com/questions/37904682/how-do-i-use-docker-environment-variable-in-entrypoint-array

반응형