Как указать порт отладчика vscode в докер-контейнере Django?

У меня есть приложение Django внутри контейнера Docker. Я настроил файлы launch.json и tasks.json на запуск моего файла docker-compose при запуске отладчика:

launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Docker: Python - Django",
            "type": "docker",
            "request": "launch",
            "preLaunchTask": "docker-run: debug",
            "python": {
            "pathMappings": [
                    {
                        "localRoot": "${workspaceFolder}/src",
                        "remoteRoot": "/app/src"
                    }
                ],
             "projectType": "django",
             "port": 8000,
            }
        }
    ]
}

tasks.json

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "docker-build",
            "label": "docker-build",
            "platform": "python",
            "dockerBuild": {
                "tag": "vscodedjangodocker:latest",
                "dockerfile": "${workspaceFolder}/Dockerfile",
                "context": "${workspaceFolder}",
                "pull": true
            }
        },
        {
            "type": "docker-run",
            "label": "docker-run: debug",
            "dependsOn": [
                "docker-build"
            ],
            "python": {
                "args": [
                    "runserver",
                    "0.0.0.0:8000",
                    "--nothreading",
                    "--noreload"
                ],
                "file": "manage.py"
            }
        }
    ]
}

docker-compose.yaml

version: '3.8'  # Specify the version at the top
services:
  backend:
    build: 
      context: .
      dockerfile: ./Dockerfile
    container_name: backend
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
    volumes:
      - .:/app

Dockerfile

FROM python:3.12-bullseye

WORKDIR /app/src/

COPY ./src/requirements.txt .

RUN pip install --prefer-binary -r requirements.txt

COPY ./src /app/src

EXPOSE 8000

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

Проблема, с которой я столкнулся, заключается в том, что я хочу, чтобы сессия отладчика запускалась на порту 8000 на моей локальной машине, но каждый раз, когда я запускаю отладчик, открывается порт 5500X (т.е. 55001, 55002 и т.д.). Например, когда я нажимаю кнопку запуска отладки на vscode, создаваемый контейнер запускается на порту 55012:8000.

Когда я запускаю только docker compose с командой docker-compose up ---build, все работает, как и ожидалось, и сервер работает на порту 8000 моей машины, но без подключенного отладчика.

Как указать отладчику VSCode, что я хочу, чтобы моя сессия была на порту 8000?

Я думаю, вам нужно добавить "port": 8000 к ключу configurations вот так:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Docker: Python - Django",
            "type": "docker",
            "request": "launch",
            "preLaunchTask": "docker-run: debug",
            "python": {
                "pathMappings": [
                        {
                            "localRoot": "${workspaceFolder}/src",
                            "remoteRoot": "/app/src"
                        }
                 ],
                 "projectType": "django",
                 "port": 8000,
            },
            "port": 8000
        }
    ]
}

Мне пришлось добавить поле "порты" в задачи.конфигурация json внутри поля "dockerRun":

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "docker-build",
            "label": "docker-build",
            "platform": "python",
            "dockerBuild": {
                "tag": "vscodedjangodocker:latest",
                "dockerfile": "${workspaceFolder}/Dockerfile",
                "context": "${workspaceFolder}",
                "pull": true
            }
        },
        {
            "type": "docker-run",
            "label": "docker-run: debug",
            "dependsOn": [
                "docker-build"
            ],
            "dockerRun": {
                "volumes": [{
                    "containerPath": "/app",
                    "localPath": "${workspaceFolder}"
                }],
                "ports": [{
                    "containerPort": 8000,
                    "hostPort": 8000
                }]
            },
            "python": {
                "args": [
                    "runserver",
                    "0.0.0.0:8000",
                ],
                "file": "manage.py"
            }
        }
    ]
}
Вернуться на верх