目次

docker compose up コマンド入門:オプションの解説と実行例

docker compose up は compose.yaml に定義されたサービスを作成して起動します。Compose の基本は Docker Compose 入門、ほかの compose コマンドは docker compose コマンド を参照してください。

構文

docker compose up [オプション] [サービス名...]

サービスを指定しなければ、すべてのサービスが対象です。up は次の順に処理します:ネットワークの作成、Volume の作成、必要に応じたイメージのダウンロードまたはビルド、コンテナの作成(設定が変わったものは再作成)、コンテナの起動。

オプション

オプション説明
-d, --detachバックグラウンドで実行します。付けない場合はログがフォアグラウンドに表示され、Ctrl+C で停止します
--build起動前にイメージをビルドします
--no-buildビルドしません。イメージがなければ失敗します
--pull always|missing|never起動前にイメージを pull するかどうか
--waitサービスがすべて実行中(ヘルスチェックがあるものは healthy)になるまで待ってから戻ります。-d を含みます
--wait-timeout 秒数--wait の最大待ち時間
--force-recreate設定が変わっていなくてもコンテナを再作成します
--no-recreateコンテナがすでにあれば再作成しません
--no-depsdepends_on のサービスを起動しません
--scale サービス=数複数のレプリカを起動します
--remove-orphanscompose.yaml から削除されたサービスのコンテナを削除します
-V, --renew-anon-volumes古いコンテナの匿名 Volume を引き継がず、作り直します
--abort-on-container-exitどれか 1 つのコンテナが停止したら全体を停止します(-d とは併用できません)
--exit-code-from サービスそのサービスの終了コードをコマンドの終了コードにします。1 つ上のオプションを含みます
-t, --timeout 秒数コンテナ停止時に待つ秒数
-w, --watchファイルの変更を監視して同期または再ビルドします(Node.js アプリ を参照)
--no-start作成だけして起動しません
--quiet-pull / --quiet-buildpull/ビルドの進捗を表示しません
--no-log-prefix、--timestamps、--no-colorフォアグラウンドモードのログ形式
--dry-run実際には実行せず、何が行われるかだけを表示します

サンプルプロジェクト

services:
  web:
    image: nginx:1.30-alpine
    ports:
      - "8080:80"
    depends_on:
      - cache
  cache:
    image: redis:8-alpine
    volumes:
      - cache_data:/data
  worker:
    image: alpine:3.23
    command: ["sh", "-c", "echo worker done"]

volumes:
  cache_data:

すべてのサービスを起動する

$ docker compose up -d
[+] up 15/15
 ✔ Image redis:8-alpine           Pulled                                                                                                          3.4s
 ✔ Network ref-compose_default    Created                                                                                                         0.0s
 ✔ Volume ref-compose_cache_data  Created                                                                                                         0.0s
 ✔ Container ref-compose-worker-1 Started                                                                                                         0.4s
 ✔ Container ref-compose-cache-1  Started                                                                                                         0.6s
 ✔ Container ref-compose-web-1    Started                                                                                                         0.8s

$ docker compose ps -a
NAME                   IMAGE               COMMAND                  SERVICE   CREATED        STATUS                              PORTS
ref-compose-cache-1    redis:8-alpine      "docker-entrypoint.s…"   cache     1 second ago   Up Less than a second               6379/tcp
ref-compose-web-1      nginx:1.30-alpine   "/docker-entrypoint.…"   web       1 second ago   Up Less than a second               0.0.0.0:8080->80/tcp, [::]:8080->80/tcp
ref-compose-worker-1   alpine:3.23         "sh -c 'echo worker …"   worker    1 second ago   Exited (0) Less than a second ago

worker は echo を実行すると終了するので Exited (0) になります。1 回だけ実行するサービスとしては正常な状態です。

一部のサービスだけを扱う

$ docker compose up -d --no-deps web
[+] up 1/1
 ✔ Container ref-compose-web-1 Running                                                                                                            0.0s

$ docker compose up -d --force-recreate web
[+] up 2/2
 ✔ Container ref-compose-cache-1 Running                                                                                                          0.0s
 ✔ Container ref-compose-web-1   Started                                                                                                          0.4s

$ docker compose up -d --wait cache
[+] up 1/1
 ✔ Container ref-compose-cache-1 Healthy                                                                                                          0.5s
  • --no-deps web:web だけを処理し、依存先の cache には触れません。設定に変更がないので Running とだけ表示されます。
  • --force-recreate web:設定が変わっていなくても web を再作成します(Started)。--no-deps を付けていないので、depends_on の cache もチェックされます(Running)。
  • --wait cache:cache の準備ができるまで待ってから戻ります。redis イメージにはヘルスチェックが定義されていないため、コンテナが実行中であれば準備完了とみなされます。

--scale:複数のレプリカ

$ docker compose up -d --scale worker=3 worker
[+] up 3/3
 ✔ Container ref-compose-worker-3 Started                                                                                                         0.5s
 ✔ Container ref-compose-worker-2 Started                                                                                                         0.3s
 ✔ Container ref-compose-worker-1 Started                                                                                                         0.2s

$ docker compose ps -a worker
NAME                   IMAGE         COMMAND                  SERVICE   CREATED         STATUS                              PORTS
ref-compose-worker-1   alpine:3.23   "sh -c 'echo worker …"   worker    4 seconds ago   Exited (0) Less than a second ago   
ref-compose-worker-2   alpine:3.23   "sh -c 'echo worker …"   worker    1 second ago    Exited (0) Less than a second ago   
ref-compose-worker-3   alpine:3.23   "sh -c 'echo worker …"   worker    1 second ago    Exited (0) Less than a second ago

--scale worker=3 で worker のコンテナが 3 つになり、名前には -1、-2、-3 と自動で番号が付きます。ホストのポートを公開している(ports がある)サービスは、ホストポートが衝突するのでそのままではスケールできません。

--exit-code-from:CI でテストを実行する

$ docker compose up --abort-on-container-exit --exit-code-from worker worker
[+] up 2/2
 ✔ Container ref-compose-worker-2 Removed                                                                                                         0.0s
 ✔ Container ref-compose-worker-3 Removed                                                                                                         0.0s
Attaching to worker-1
worker-1  | worker done
worker-1 exited with code 0
Aborting on container exit...
Container ref-compose-worker-1 Stopping
Container ref-compose-worker-1 Stopped
w Enable Watch   d Detach
  • worker だけを実行し、それが終了すると(--abort-on-container-exit)up 全体も終了します。up の終了コードは worker の終了コードになります(--exit-code-from)。CI でテスト用サービスを実行するときに使います:テスト失敗 → コマンド失敗 → CI 失敗。
  • 前のステップの --scale で作られた worker-2、worker-3 は今回削除されました(Removed)。レプリカ数を指定しなかったので、デフォルトの 1 つに戻ったためです。

関連する章

練習問題

練習問題:サンプルの compose.yaml で web のポートを 8081:80 に変更し、1 つのコマンドで反映してください。また、再作成されたのが web だけであることを確認してください。

解答
docker compose up -d

出力では web が Recreated/Started、cache が Running(変更なし)と表示されます。docker compose ps を見ると、web の PORTS が 0.0.0.0:8081->80/tcp に変わっています。

よくある質問

compose.yaml を変更したら、どうやって反映しますか?

もう一度 docker compose up -d を実行します。Compose が設定を比較し、変更のあったサービスだけを再作成します。docker compose restart では新しい設定は反映されません。実際の検証は [docker compose コマンド](/ja/docker/compose-commands/) を参照してください。

Dockerfile を変更したのに、up -d で再ビルドされないのはなぜですか?

イメージがすでに存在する場合、up は自動では再ビルドしません。--build を付けて docker compose up -d --build を実行します。

--wait と depends_on の service_healthy は何が違いますか?

depends_on はサービス間の起動順序を制御します。--wait は docker compose up コマンド自体を、すべてのサービスが実行中(ヘルスチェックがあるものは healthy)になるまで待たせてから終了させます。スクリプトや CI で次の処理に進むときに便利です。

更新日 2026年10月14日