run
を使用してdocker-compose.yml
ファイルを起動する理由はありますか、それともup
を使用する必要がありますか?
run
は特定のコンテナを起動できることを理解していますが、コンテナを指定せずに使用して、すべてのymlコンテナを起動する場合について言及しています。
docker-compose 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
を実行すると、同じポートを尊重していた場合、すぐに失敗します。したがって、これらのポートはデフォルトでは作成されません。
別のユースケース( Compose環境変数リファレンス ):
サービスで使用できる環境変数を確認するには、
docker-compose run SERVICE env
を実行します。
PdbデバッガーでPythonを使用している場合は、次のように指摘します。
import pdb; pdb.set_trace()
以下を使用してスクリプトを実行する場合、シェルにドロップされません。
docker-compose up
ただし、runを使用すると、予想どおりデバッガーにドロップダウンします。
docker-compose run