web-dev-qa-db-ja.com

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

runを使用してdocker-compose.ymlファイルを起動する理由はありますか、それともupを使用する必要がありますか?

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

84
Raif

docker-compose run で述べたように:

実行によって渡されたコマンドは、サービス構成で定義されたコマンドを上書きします
たとえば、Webサービスの構成がbashで開始される場合、docker-compose run web python app.pypython 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を実行すると、同じポートを尊重していた場合、すぐに失敗します。したがって、これらのポートはデフォルトでは作成されません。


別のユースケース( Compose環境変数リファレンス ):

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

94
VonC

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

import pdb; pdb.set_trace()

以下を使用してスクリプトを実行する場合、シェルにドロップされません。

docker-compose up

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

docker-compose run
17
quickinsights