docker-compose upまたはrunを使用する必要がありますか?


129

ファイルrunを起動するために使用する理由はありdocker-compose.ymlますか、それとも使用すべきですupか?

run特定のコンテナーを起動できることは理解していますが、コンテナーを指定せずに使用して、すべてのymlコンテナーを起動する場合を指します。

回答:


141

docker-compose run(2015)で述べたように

runによって渡されたコマンドは、サービス構成で定義されたコマンドを上書きします
たとえば、Webサービス構成がで開始されているbash場合、でそれをdocker-compose run web python app.pyオーバーライドしますpython app.py

2番目の違いは、docker-compose runコマンドがサービス構成で指定されたポートを作成しないことです。
これにより、すでに開いているポートとのポートの衝突が防止されます。サービスのポートを作成してホストにマッピングする場合は、-service-portsフラグを指定します。

$ docker-compose run --service-ports web python manage.py shell

したがって、それらの特定のニーズがない限り(コマンドをオーバーライドするか、異なるポートで1つのコンテナーのみを実行する場合)、docker-compose up(1つのコンテナーであっても)十分です。

ポートを作成したくない理由とタイミングを説明できますか?そのため、すでに開いているポートと競合する可能性があります。

単にdocker-compose run、サービスに対して1回限りのコマンドを実行するために作成されたからです。
つまり、docker-compose upすでにを実行した場合、すべてのコンテナはすでにからの指定されたポートで実行されていますdocker-compose.yml
やってdocker-compose runこの段階では、それは同じポートを尊重した場合は、すぐに失敗する、(1-オフのコマンドを実行します)。したがって、これらのポートのデフォルトの非作成です。


別の使用例(Compose環境変数リファレンス):

サービスで使用できる環境変数を確認するには、を実行しdocker-compose run SERVICE envます。


これらのコマンドの最新(2019+)バージョンはdocker/docker.github.io次のとおりです。


27

Pythonをpdbデバッガーで使用している場合は、次のように指摘します。

import pdb; pdb.set_trace()

以下を使用してスクリプトを実行しても、シェルにドロップしません。

docker-compose up

ただし、runを使用すると、期待どおりにデバッガーにドロップダウンします。

docker-compose run

7

docker docsからの回答があります。

通常は、必要ですdocker-compose up。でup定義されたすべてのサービスを開始または再起動するために使用しますdocker-compose.yml。デフォルトの「接続」モードでは、すべてのコンテナのすべてのログが表示されます。「デタッチ」モード(-d)では、コンテナの起動後にComposeが終了しますが、コンテナは引き続きバックグラウンドで実行されます。

このdocker-compose runコマンドは、「1回限り」または「アドホック」のタスクを実行するためのものです。実行するサービス名が必要であり、実行中のサービスが依存するサービスのコンテナーのみを開始します。run テストの実行、またはデータボリュームコンテナーへのデータの削除や追加などの管理タスクの実行に使用します。このrunコマンドはdocker run -ti、コンテナへのインタラクティブターミナルを開き、コンテナ内のプロセスの終了ステータスと一致する終了ステータスを返すというように機能 します。


1
これは受け入れられる答えになるはずです。基本的に、を使用docker-compose runして、実行中のサービスに対してコマンドを実行しdocker-compose up、新しいサービスを生成します。
goonerify
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.