🥩

Djangoでデバッグ時「Error: That port is already in use.」が出た時の対処の流れ【おそらく基礎の話】

2025/02/04に公開

docker-compose.ymlで設定したポートと、
VSCodeのlaunch.jsonで設定したポートが競合している、

ということが原因でした。

こんにちは、
ワニかず@40歳 出戻りエンジニアです。

環境

  • VSCodeでDockerの環境を構築
  • ブラウザでページを表示できるようになった段階

問題の設定ファイル

VS Codeのデバッガーの設定ファイル

「launch.json」が

launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python デバッガー: Django",
            "type": "debugpy",
            "request": "launch",
            "args": [
                "runserver"
            ],
            "django": true,
            "autoStartBrowser": false,
            "program": "${workspaceFolder}/manage.py"
        }
    ]
}

となっています。

docker-compose.yml

Dockerコンテナの設定ファイルが、

docker-compose.yml
services:
  web:
    container_name: my_django_app  # 明示的なコンテナ名
    build:
      context: ..
      dockerfile: docker/Dockerfile
    ports:
      - "8000:8000"
    volumes:
      - ../backend:/app
    command: python manage.py runserver 0.0.0.0:8000
    depends_on:
      - db
  db:
    container_name: my_django_db  # 明示的なコンテナ名
    image: postgres:13
    environment:
      - POSTGRES_DB=calendar_db
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data/
      
volumes:
  postgres_data:

となっています。

修正箇所

「launch.json」にポートの設定がないことが問題でした。
ですので、

launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Python デバッガー: Django",
            "type": "debugpy",
            "request": "launch",
            "args": [
                "runserver",
               "8001"  //デバッガー実行時のポート番号を追加
            ],
            "django": true,
            "autoStartBrowser": false,
            "program": "${workspaceFolder}/manage.py"
        }
    ]
}

図で理解

こうだったものを

こんな感じに修正したイメージです。

おしまいに

このエラーを解決するために、
キャッシュをクリアしてから再ビルド

docker-compose down
docker system prune -f
docker-compose up --build

などAIの力を借りていろいろやったのですが、
全然違うところが原因でした。

また、基本的すぎることなのか、
検索しても全然違うっぽい話しか出てこず、
ちょっとハマりました。

この記事が誰かの助けになると幸いです。

Discussion