Как указать порт отладчика 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"
}
}
]
}