Docker Desktopが起動しない・動かない

症状1:Docker Desktopが起動しない(Windows)

エラー:

Docker Desktop failed to start

原因:WSL 2がインストールされていない、または正しく設定されていない。

対処法:

  1. PowerShellを管理者として開く
  2. 以下のコマンドを実行:
wsl --install
wsl --set-default-version 2

PCを再起動してから、Docker Desktopを起動してください。

症状2:「Docker daemon is not running」エラー

エラー:

Cannot connect to the Docker daemon. Is the docker daemon running?

原因:Docker Desktopが起動していない。

対処法:Docker Desktopを起動してください。タスクトレイ(Windows)またはメニューバー(Mac)にDockerアイコンが表示されるまで待ちます。

コンテナが起動しない

症状1:ポートが既に使用されている

エラー:

Error: Bind for 0.0.0.0:3000 failed: port is already allocated

または

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

原因:指定したポート(例:3000番)が既に他のアプリケーションで使われている。

対処法1:他のアプリケーションを停止する

# Windowsでポートを使用しているプロセスを確認
netstat -ano | findstr :3000

# Macでポートを使用しているプロセスを確認
lsof -i :3000

# プロセスを停止(プロセスIDを確認してから)
kill プロセスID

対処法2:docker-compose.ymlのポート番号を変更する

services:
  web:
    ports:
      - "3001:3000"  # ホスト側を3001に変更

変更後、http://localhost:3001でアクセスします。

症状2:イメージのビルドに失敗

エラー:

ERROR [internal] load metadata for docker.io/library/node:18
failed to solve with frontend dockerfile.v0

原因:ネットワークの問題でイメージをダウンロードできない。

対処法:

  • インターネット接続を確認
  • Docker Desktopを再起動
  • 再度実行:docker-compose up --build

症状3:コンテナがすぐに停止する

症状:docker-compose upすると起動するが、すぐに終了してしまう。

原因:DockerfileのCMDが正しくない、またはアプリケーションがエラーで終了している。

対処法:ログを確認します。

# ログを確認
docker-compose logs

# 特定のサービスのログ
docker-compose logs web

# リアルタイムでログを表示
docker-compose logs -f

環境変数・設定の問題

症状1:環境変数が読み込まれない

エラー:

Error: DATABASE_URL is not defined

原因:.envファイルがない、または正しく読み込まれていない。

対処法:

  1. .envファイルがプロジェクトのルートにあるか確認
  2. .env.exampleをコピーして.envを作成:
cp .env.example .env
  1. .envファイルに必要な値を設定
  2. コンテナを再起動:
docker-compose down
docker-compose up

症状2:.envの変更が反映されない

症状:.envファイルを変更したのに、アプリケーションが古い値を使っている。

原因:コンテナを再起動していない。

対処法:

docker-compose down
docker-compose up

または

docker-compose restart

データベースの問題

症状1:データベースに接続できない

エラー:

Error: connect ECONNREFUSED 127.0.0.1:5432

または

SQLSTATE[HY000] [2002] Connection refused

原因:データベースコンテナが起動していない、またはホスト名が間違っている。

対処法:

  1. データベースコンテナが起動しているか確認:
docker-compose ps
  1. ホスト名を確認(localhostではなく、docker-compose.ymlで定義したサービス名を使う):
# 間違い
DATABASE_URL=postgres://user:pass@localhost:5432/db

# 正しい(docker-compose.ymlのサービス名を使う)
DATABASE_URL=postgres://user:pass@db:5432/db

症状2:データベースのデータが消える

症状:docker-compose downすると、データベースに登録したデータが消えてしまう。

原因:volumesが設定されていない、または-vオプションでボリュームごと削除した。

対処法:

docker-compose.ymlにvolumesを追加:

services:
  db:
    image: postgres:15
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

⚠️ データを削除したくない場合

docker-compose down -vは使わないでください。-vオプションはボリュームも削除します。

停止だけなら:docker-compose stop

コンテナ削除のみ:docker-compose down(ボリュームは残る)

ファイル・ボリュームの問題

症状1:コードの変更が反映されない

症状:ファイルを編集しても、ブラウザで確認すると変更が反映されていない。

原因:volumesでファイルをマウントしていない。

対処法:

docker-compose.ymlにvolumesを追加:

services:
  web:
    volumes:
      - .:/app  # 現在のディレクトリをコンテナの/appにマウント

変更後、コンテナを再起動:

docker-compose down
docker-compose up

症状2:Permission denied エラー

エラー:

Permission denied: '/app/data'

原因:コンテナ内のユーザーに書き込み権限がない。

対処法(Linux/Mac):

# ディレクトリの権限を変更
chmod -R 777 ./data

または、Dockerfileで権限を設定:

RUN chown -R www-data:www-data /app/data

パフォーマンスの問題

症状1:コンテナの動作が遅い

症状:アプリケーションの動作が異常に遅い(特にWindows/Mac)。

原因:volumesでマウントしたファイルの読み書きが遅い。

対処法:

  • Docker Desktopのリソース設定を増やす(Settings → Resources)
  • CPUとメモリを増やす
  • node_modulesなど大量のファイルは除外:
services:
  web:
    volumes:
      - .:/app
      - /app/node_modules  # node_modulesはコンテナ内のものを使う

症状2:ビルドが遅い

症状:docker-compose up --buildが毎回時間がかかる。

原因:キャッシュが効いていない。

対処法:

Dockerfileの順序を最適化:

# 悪い例
COPY . .
RUN npm install

# 良い例(依存関係ファイルを先にコピー)
COPY package*.json ./
RUN npm install
COPY . .

その他の問題

症状1:ディスク容量不足

エラー:

no space left on device

原因:古いイメージやコンテナが溜まっている。

対処法:

# 使われていないコンテナ、イメージ、ネットワークを削除
docker system prune -a

# ボリュームも含めてすべて削除(注意:データが消えます)
docker system prune -a --volumes

症状2:コンテナに入れない

症状:docker-compose execでエラーになる。

原因:コンテナが起動していない、またはサービス名が間違っている。

対処法:

  1. コンテナが起動しているか確認:
docker-compose ps
  1. 正しいサービス名を使う(docker-compose.ymlで確認):
docker-compose exec web bash

症状3:「This site can't be reached」エラー

症状:ブラウザでhttp://localhost:3000にアクセスできない。

原因:ポート番号が間違っている、またはコンテナが起動していない。

対処法:

  1. コンテナが起動しているか確認:
docker-compose ps
  1. docker-compose.ymlでポート番号を確認
  2. 正しいURLでアクセス(例:http://localhost:8000)

困った時の基本手順

どうしても解決できない時は、以下の順番で試してください:

1. ログを確認

docker-compose logsでエラーメッセージを確認

2. 再起動

docker-compose restartで再起動

3. クリーンビルド

docker-compose down
docker-compose up --build

4. 完全リセット

docker-compose down -v
docker-compose up --build

5. Docker Desktop再起動

Docker Desktopを完全に終了して再起動

6. PC再起動

最終手段:PCを再起動

💡 エラーメッセージを検索する

エラーメッセージをそのままGoogleで検索すると、解決方法が見つかることが多いです。

例:「docker port is already allocated 解決」で検索