回答:
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次のとおりです。
docker docsからの回答があります。
通常は、必要です
docker-compose up。でup定義されたすべてのサービスを開始または再起動するために使用しますdocker-compose.yml。デフォルトの「接続」モードでは、すべてのコンテナのすべてのログが表示されます。「デタッチ」モード(-d)では、コンテナの起動後にComposeが終了しますが、コンテナは引き続きバックグラウンドで実行されます。この
docker-compose runコマンドは、「1回限り」または「アドホック」のタスクを実行するためのものです。実行するサービス名が必要であり、実行中のサービスが依存するサービスのコンテナーのみを開始します。runテストの実行、またはデータボリュームコンテナーへのデータの削除や追加などの管理タスクの実行に使用します。このrunコマンドはdocker run -ti、コンテナへのインタラクティブターミナルを開き、コンテナ内のプロセスの終了ステータスと一致する終了ステータスを返すというように機能 します。
docker-compose runして、実行中のサービスに対してコマンドを実行しdocker-compose up、新しいサービスを生成します。