回答:
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
、新しいサービスを生成します。