1. ホーム
  2. docker

[解決済み] docker-compose upとrunのどちらを使うべきですか?

2022-04-22 08:36:05

質問

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

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

どのように解決するのですか?

で述べたように 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つのコンテナに対しても)十分です。

で述べたように コメント によって questionto42 テスト用であれば

を忘れずに追加してください。 --rm の後に run を実行するたびにコンテナを作成します。 docker-compose run ... 終了後に削除されることはありません。

このことを知らずにしばらくテストしまくると、コンテナのリストが長くなってしまうことがあります。


<ブロッククオート

なぜ、どのような場合にポートを作成しないのか、説明できますか?それは、すでに開いているポートと衝突する可能性があるためです。

単純に docker-compose run は、自分のサービスに対して単発のコマンドを実行するために作られたものです。

つまり、もしあなたがすでに docker-compose up から、すべてのコンテナは指定されたポートですでに実行されています。 docker-compose.yml .

を行うこと。 docker-compose run この段階で(単発のコマンドを実行するために)同じポートを尊重していた場合、即座に失敗します。そのため、これらのポートはデフォルトで作成されないようになっています。


もう一つのユースケース(in 環境変数の参照先を構成する ):

あるサービスで利用可能な環境変数を確認するには docker-compose run SERVICE env .


これらのコマンドの最新(2019年以上)バージョンは、以下の通りです。 docker/docker.github.io :