目次
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-deps | depends_on のサービスを起動しません |
--scale サービス=数 | 複数のレプリカを起動します |
--remove-orphans | compose.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-build | pull/ビルドの進捗を表示しません |
--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日