回答:
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は解決されません。なぜ何かアイデア?