GNU/Linux >> Linux の 問題 >  >> Linux

docker exec で 2 つのコマンドを実行する

最初の例では、 -c を指定しています docker exec へのフラグ .それは簡単な答えです:docker exec -c がありません

2 番目の例では、Docker が認識する前に、シェルがこれを 2 つのコマンドに解析しています。これと同等です:

if docker exec [id] cd /var/www/project
then
    composer install
fi

まず、docker exec 実行され、0 (成功) で終了した場合、composer install ローカルで実行しようとします 、Docker の外部。

あなたがする必要があるのは、両方のコマンドを単一の引数として docker exec に渡すことです 文字列を使用しています。その後、コンテナー内に入るまで、シェルによって解釈されません。

docker exec [id] "cd /var/www/project && composer install"

ただし、コメントで指摘したように、これも機能しません。それは cd だからです シェルの組み込みであり、単独では存在しません。初期コマンドとして実行しようとすると失敗します。したがって、次のステップは、これをシェルに渡して実行することです。

docker exec [id] "bash -c 'cd /var/www/project && composer install'"

そして最後に、この時点で && は引用符の内部セットに移動したため、bash を囲む引用符は必要ありません。 コマンド...必要に応じてドロップできます。

docker exec [id] bash -c 'cd /var/www/project && composer install'

コンテナー ID の後のすべてが実行するコマンドであるため、最初の例では -c exec のオプションではありませんが、コマンド docker が実行を試み、そのコマンドが存在しないため失敗します。

docker run からこの構文を見つけた可能性が高いです。 エントリポイントが /bin/sh に設定されたコマンド .ただし、exec はエントリポイントをバイパスするため、実行するには完全なコマンドを含める必要があります。他の人が指摘しているように、そのコマンドには bash のようなシェル、または以下の例では sh:が含まれています:

docker exec [id] /bin/sh -c 'cd /var/www/project && composer install'

Linux
  1. 一部のDOCKERコマンド

  2. 1つのSudoで一連のコマンドを実行しますか?

  3. Docker コマンドがハングアップし、応答がありません

  1. GitBashとは何ですか。 GitBashコマンドの操作

  2. Linuxコマンドのチートシート:例を使用

  3. 入力でNohupコマンドを実行しますか?

  1. 例を含むNmapコマンド

  2. LinuxでのRPMコマンドと例

  3. 最も重要なDockerコマンド–Dockerコンテナの操作