2017-02-02 78 views
6

私はdocker execで2つのコマンドを実行しようとしています。具体的には、特定のディレクトリ内でコマンドを実行する必要があります。 私はこれを試してみました、butit動作しませんでした:docker execで2つのコマンドを実行

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

パラメータ-cが検出されません。

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

しかし、コマンドcomposer installdocker execコマンドの後に実行されます。 私もこれを試してみました。 どうすればいいですか?

+1

は、あなたがしようとしました:: 'ドッカ幹部[ID]/binに/ bashの-c「CDの/ var/www /の他の人が指摘したように、そのコマンドは、shをbashのような以下の例ではシェルを含みプロジェクト&&コンポーザーインストール ' –

+0

おかげで、私はあなたのコメントを見ていないが、それは働いた! –

答えて

12

最初の例では、-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 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' 
+0

こんにちは、私はあなたのコマンドを試して、それは動作していない、それはエラー表示されます: rpcエラー:コード= 2 desc = ociランタイムエラー:exec失敗:container_linux.go:247:/var/www/project &&コンポーザーインストール\ ":stat cd/var/www/project &&コンポーザーインストール:そのようなファイルやディレクトリはありません" 明らかに、私は手動でアクセスできるようにディレクトリは存在します。 –

+0

@Adriàはい、私はここで 'cd 'がコマンドであるとは考えていませんでした。私は答えを更新しましたが、あなたはあなた自身が投稿した答えと多かれ少なかれ一致します(しかし、それがなぜ機能するのかについての詳しい説明があります)。 –

0

Nehal Jワニは、彼の解説に言ったように、正しい構文は次のとおりです。

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

多くの感謝!

1

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

docker runコマンドから、この構文が見つかった可能性があります。エントリポイントは/bin/shに設定されています。ただし、execはエントリポイントをバイパスするため、実行するには完全なコマンドを含める必要があります。

docker exec [id] /bin/sh -c 'cd /var/www/project && composer install' 
関連する問題