1. ホーム
  2. docker

[解決済み] 引数を受け取るシェルスクリプトでDocker Runのエントリポイントをオーバーライドする

2022-03-10 21:29:52

質問

引数を受け取るエントリーポイントのシェルスクリプトがあります。 -a -b .

私は docker-compose.yml ファイルに、tomcat のエントリポイントを上書きするように記述しています。

entrypoint: /usr/local/tomcat/entrypoint.sh -a param1 -b param2

とは何ですか? ドッカーラン の代替手段を教えてください。

docker run --entrypoint "/usr/local/tomcat/entrypoint.sh -a param1 -b param2" tomcat:jre8

は動作しません

得ることができます。

docker: Error response from daemon: 
invalid header field value "oci runtime error: container_linux.go:247: 
starting container process caused \"exec:
\\\"/usr/local/tomcat/entrypoint.sh -a param1 -b param2\\\": 
stat /usr/local/tomcat/entrypoint.sh -a param1 -b param2: 
no such file or directory\"\n".

ご参考までに。

docker run --entrypoint "/usr/local/tomcat/entrypoint.sh" tomcat:jre8

はDockerの観点からは動作しますが、明らかにスクリプトは失敗します。

解決方法は?

コマンドを引用符で囲んでいるのが原因です。

を実行すると docker run --entrypoint "/usr/local/tomcat/entrypoint.sh -a param1 -b param2" tomcat:jre8 Dockerはこの引用符の中にあるものを、1つのスクリプトファイルとして扱います。

エラーからわかるように

stat /usr/local/tomcat/entrypoint.sh -a param1 -b param2: 
no such file or directory\"\n".

を実行しようとしているのです。 stat を実行する前に、それが存在するかどうかを知ることができます。

エントリーポイントへの引数は、dockerコマンドの最後にこのように記述します。

docker run --entrypoint <entrypoint.sh> <image:tag> <arg1> <arg2> <arg3>

コマンドはこうなります。

docker run --entrypoint /usr/local/tomcat/entrypoint.sh tomcat:jre8 -a param1 -b param2 

公式ドキュメントのコードスニペットをご覧ください。

<ブロッククオート

画像のENTRYPOINTは、COMMANDに似ています。 は以下を指定します。 どの実行ファイルを実行するか コンテナの起動時に

https://docs.docker.com/engine/reference/run/#/entrypoint-default-command-to-execute-at-runtime