DockerはCMDパラメータを渡して複数のコマンドを実行します。

DockerはCMDパラメータを渡して複数のコマンドを実行します。

Dockerが実行されたら、いくつかの設定を実行する必要があります。

だからすべての設定を入れて、次のように./init.sh設定しました。ENTRYPOINT

ENTRYPOINT ["./init.sh"]

ただし、ユーザーから別のコマンドを実行する必要があります。例えば、

docker run -it name:tag pwd > a; pwd > b

上記のコマンドは明らかに動作しません!

それから私はここに閉じ込められます。上記のコマンドを渡すと、ENTRYPOINT次のようになると思います。

ENTRYPOINT ["./init.sh", "pwd", ">", "a", ";", "pwd", ">", "b"]

正しいですか?これは、以下のすべてのパラメータを解析してから実行する必要があるという意味ですかinit.sh?これを達成するためのより良い、正しい方法はありますか?

ベストアンサー1

コマンドの最終パラメーターは、docker runENTRYPOINTで定義されているコマンドにパラメーターとして渡されます。おそらくあなたが望むのは、このようなスクリプトを指すENTRYPOINTです。

# Do theConfiguration 
...
# Run the user commands
sh -c "$*"

簡単な場合は、デフォルトパラメータと一緒に使用できます。

docker run name:tag pwd

より複雑なコマンドでは、ホストシェルの解析を避けるために、すべてのエントリを引用符で囲むことができます。

docker run name:tag "pwd > a; pwd > b"

ただし、リダイレクトされた出力がどこに行くかを考慮する必要があります。上記のコードに示すように、コンテナ内に2つのファイルがあります。コンテナの外側から見るには、ボリュームをマウントする必要があります。

おすすめ記事