답변:
ENTRYPOINT 의 exec 형식 을 사용하고 있습니다. 달리 쉘 형태 의 간부 인 형태는 명령 쉘을 호출하지 않습니다. 이것은 정상적인 쉘 처리가 발생하지 않음을 의미합니다. 예를 들어, ENTRYPOINT [ "echo", "$HOME" ]
$ HOME에서 변수 대체를 수행하지 않습니다. 쉘 처리를 원하면 쉘 양식을 사용 하거나 쉘을 직접 실행하십시오 (예 :) ENTRYPOINT [ "sh", "-c", "echo $HOME" ]
.
exec 형태를 사용하고 셸을 직접 실행하면 셸 형태의 경우와 같이 docker가 아닌 환경 변수 확장을 수행하는 셸입니다. ( Dockerfile 참조에서 )
귀하의 경우에는 쉘 형태를 사용 합니다.
ENTRYPOINT ./greeting --message "Hello, $ADDRESSEE\!"
--attitude "shouting"
하는 docker run
명령에 인수를 추가 할 수 없습니다./greeting
ENTRYPOINT ./greeting --message "Hello, $ADDRESSEE\! $0 $@"
을 ./greeting
통해 추가 변수를 전달하려는 경우 docker run
(또는 CMD
Dockerfile 을 전달하려는 경우에도 사용 )
greeting
예시). hynek.me/articles/docker-signals
제안 된 답변으로 해결하려고 노력했지만 여전히 몇 가지 문제가 발생했습니다 ...
이것은 내 문제에 대한 해결책이었습니다.
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 등의 큰 도움 끝에 나는 시도하기로 결정했습니다.
그리고 그것은 작동했습니다.
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를
ENTRYPOINT java -jar /dockertest.jar -Djava.security.egd=file:/dev/./urandom -Dserver.port=$port
동안ENV port=123
. 포트 ENV가 해결되지 않았습니다. 이유는 무엇입니까?