2016-06-14 3 views
3

私は、データベース(統合テスト)でPHPUnitを実行する能力が必要なので、PHPとMySQLデータベースを持つリンクされたコンテナを持つコンテナを持っています。リンクされたDockerコンテナを自動リロードする方法は?

基本的なコマンドは次のようになります。私はdbコンテナを作成し、このコマンドを実行する前にそれを開始している

docker run -i --rm --link db binarydata/phpunit php script.php 

binarydata/phpunitコマンドが実行された後にコンテナが削除されます。しかし、dbコンテナは動作し続けています。

質問:リンクされたコンテナで--rmの機能を達成するにはどうすればできますか。コマンドを実行した後も削除されますか?

+0

テストを開始するためにあなたは何を使用していますか? – Matt

+0

@Matt私はPHPStormを使用しています。上記のコマンドはシェルスクリプトでラップされており、シェルスクリプトをPHPインタプリタとして使用しています。http://obrown.io/2015/12/23/phpunit-docker-phpstorm .html –

答えて

2

リンクされたコンテナで--rm機能を実現するにはどうすればコマンドが実行された後でも削除されますか?

まず、ドッカー1.10+で--linkを使用する必要はありません。 docker-compose will create for you a networkで、すべてのコンテナがお互いを見ます。
docker-compose aliasで、binary/phpunitを他のコンテナに使用する場合は "db"と宣言できます。

第2に、そのネットワークを使用して、PHPコンテナを停止/削除すると、そのネットワークから別名「db」を含めて削除されます。

これは、古いリンク(docker 1.8 and before)とは異なり、それはそれを必要としたコンテナのmodify the /etc/hostsになります。その場合、リンクされたコンテナを削除しても、実際には/etc/hostsは変更されません。
new embedded docker-daemon DNSでは、もはやその必要はありません。そうでない場合、コマンドは決して戻らないとdbコンテナが削除されることはありませんでしょう

docker-compose up --abort-on-container-exit --force-recreate

Mattはコメントで次のコマンドおよび注意事項を示唆しています。
up stdoutでちょっと混乱します。
テストの終了ステータスも失われます。代わりに画面に出力されます。

+0

このコマンドは、一度だけ実行するシェルスクリプトであるはずです。シェルスクリプトの隣に 'docker-compose.yml'を置いて、' docker run'ではなく 'docker-compose run'を使うことができますか? –

+1

正確に。より正確に言えば、それはドッキング・アシストです。 – VonC

+0

私はPhpUnitコンポーネントがフォアグラウンドにあり、stdoutが現れるように 'run'が必要であると推測しています。 – Matt

関連する問題