MeWrite Docs

Docker Compose: Service failed to start

Docker Composeでサービスの起動に失敗した場合の原因と解決策

概要

Docker Composeで定義したサービスが起動に失敗する場合のエラーと解決方法です。

エラーメッセージ

``` ERROR: for web Cannot start service web: driver failed programming external connectivity on endpoint ```

原因

  1. ポートの競合: 既に使用中のポート
  2. 依存サービスの起動失敗: depends_onの順序問題
  3. ボリュームの権限問題: マウントしたディレクトリへのアクセス
  4. ネットワークの問題: カスタムネットワークの設定ミス

解決策

1. depends_onとhealthcheckを設定

```yaml

docker-compose.yml

version: ‘3.8’

services: db: image: postgres:15 environment: POSTGRES_PASSWORD: password healthcheck: test: [“CMD-SHELL”, “pg_isready -U postgres”] interval: 5s timeout: 5s retries: 5

web: build: . depends_on: db: condition: service_healthy ports: - “3000:3000” ```

2. ポートの競合を解決

```bash

使用中のポートを確認

lsof -i :3000

docker-compose.ymlでポートを変更

ports:

  • “3001:3000” ```

3. ボリュームの権限を設定

```yaml services: web: volumes: - ./app:/app user: “${UID}:${GID}” # ホストのUID/GIDを使用 ```

```bash

.envファイル

UID=1000 GID=1000 ```

4. ログを確認

```bash

全サービスのログ

docker compose logs

特定サービスのログ

docker compose logs web

リアルタイムでログを追跡

docker compose logs -f web ```

5. クリーンアップして再起動

```bash

停止してボリュームも削除

docker compose down -v

イメージも含めて再ビルド

docker compose up –build –force-recreate ```

6. ネットワークの確認

```bash

ネットワーク一覧

docker network ls

詳細確認

docker network inspect myapp_default ```

よくある間違い

  • depends_onだけでは起動順序を保証しない
  • コンテナ内からlocalhostでDBに接続しようとする
  • .dockerignoreがないためnode_modulesがコピーされる

関連エラー

関連エラー

Docker の他のエラー

最終更新: 2025-12-11