如何指定Docker容器中Django应用的VSCode调试端口?
解决VSCode Docker调试Django时端口随机分配的问题
问题核心是当前调试配置用的是VSCode内置的docker-run任务,该任务默认会随机映射本地端口,而非复用docker-compose.yaml里的固定端口配置。以下是调整步骤:
1. 更新tasks.json,改用docker-compose启动任务
将原来的docker-run: debug任务替换为docker-compose类型的任务,直接复用你的docker-compose.yaml配置:
{ "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-compose", "label": "docker-compose: debug", "dependsOn": ["docker-build"], "dockerCompose": { "up": { "services": ["backend"], "build": true }, "files": ["${workspaceFolder}/docker-compose.yaml"] } } ] }
2. 调整launch.json,关联新的docker-compose任务
修改preLaunchTask指向新的任务标签,并指定容器名称确保调试器能正确匹配:
{ "version": "0.2.0", "configurations": [ { "name": "Docker: Python - Django", "type": "docker", "request": "launch", "preLaunchTask": "docker-compose: debug", "python": { "pathMappings": [ { "localRoot": "${workspaceFolder}/src", "remoteRoot": "/app/src" } ], "projectType": "django", "port": 8000, "containerName": "backend" } } ] }
3. 保留docker-compose.yaml的原有配置
你的docker-compose.yaml已经正确设置了端口映射8000:8000,无需修改:
version: '3.8' services: backend: build: context: . dockerfile: ./Dockerfile container_name: backend command: python manage.py runserver 0.0.0.0:8000 ports: - 8000:8000 volumes: - .:/app
生效说明
启动调试后,VSCode会先执行镜像构建,再通过docker-compose up启动服务,此时本地8000端口会直接映射到容器内的8000端口,同时调试器会自动附加到backend容器的Django进程上,既保留了固定端口的访问,又实现了调试功能。
内容的提问来源于stack exchange,提问作者Paul Miranda
相关产品推荐
相关产品推荐

