2015-09-05 13 views
6

の開発にドッカーを使用しています。このプロセスでは、5つのコンテナを作成する必要があります(Webサーバーの場合は1つ、ポストグル、レディス、モンゴーの場合は4つ)。 Webサーバーコンテナは、他のコンテナ用のリンクを含むように構成されており、独自のENV変数、開発ホストマシンからのボリュームをマウントしています。docker-composeでコンテナをビルドしますが、後で-itオプションを指定して/ etc/bashを実行しますか?

問題は、サーバー自体を実行するためにWebコンテナが必要ないことです。私は、すべての従属コンテナが作成された後に-itオプションをWebコンテナ内にexec /etc/bashする必要があります。ザッツはなぜ、ウェブ・コンテナのための私のdockerfileがで終わる:

明らか
CMD /bin/true 

、このような容器は文句を言わないで実行するので、私はそれを「入り」とnode app.jsを実行するために

docker exec -it <CONTAINER ID> /bin/bash 

のようななめらかを使用することはできませんまたは他のいくつかのタスク。

docker-compose.ymlファイルの一部としてコンテナを作成する方法はありますが、後で-itオプションを指定して/ etc/bashを実行しますか?

ところで、確かに私は手動で

docker run \ 
--link postgres 
--link ... 
-e "NODE_ENV=development" \ 
-e ... \ 
... 
... 
.. 

で別のWebコンテナを起動することができますが、この場合、私は毎回私が行くよargumetsとしてなど、ENVはvarsは、すべてのリンクを追加するボリュームを必要としますアプリを開発する。

+0

あなたのユースケース/ワークフローについて詳しく説明できますか?不必要に複雑に思えますか? – johnharris85

答えて

12

docker-compose runのように見えますがあなたの友人になるでしょう。 docker compose docsから:

サービスに対して1回のコマンドを実行します。たとえば、次のコマンドはWebサービスを開始し、コマンドとしてbashを実行します。

$ docker-compose run web bash

コマンドdocker-compose run <service-name>はまた、彼らがすでに実行されていない場合は、必要なすべてのコンテナ(例えばボリュームとのリンクを提供するもの)は、前の容器<service-name>に開始されることを保証します。

ポートマッピングを使用する場合は、docker-compose run --service-ports <service-name>を使用することを検討してください。このオプションを指定しないと、docker-composedocker-compose upを使用する場合にのみポートをマップします。

docker runと同様に、--rmオプションを使用すると、完了したらコンテナを削除することもできます。

画像にENTRYPOINTを使用している場合は、docker-compose.ymlにこれを上書きすることを検討してください。entrypoint: /bin/bash

+0

ありがとうございましたJan、しかし私が必要とするものではありませんが、私は解決策を見つけました。私は数日で投稿しようとします。 – f1nn

+0

ありがとう、これは私のためにうまくいく。 –

関連する問題