Docker Python容器关联PostgreSQL容器时构建失败求助
问题排查与解决:Docker化Python应用关联PostgreSQL时容器启动失败
问题描述
原有Docker化Python应用运行正常,添加Docker化PostgreSQL数据库后,构建容器时持续报错,错误信息如下:
[23165 ms] Error: An error occurred setting up the container. [23165 ms] at Pte (c:\Users\IT\.vscode\extensions\ms-vscode-remote.remote-containers-0.299.0\dist\spec-node\devContainersSpecCLI.js:1954:3572) [23165 ms] at process.processTicksAndRejections (node:internal/process/task_queues:96:5) [23165 ms] at async rre (c:\Users\IT\.vscode\extensions\ms-vscode-remote.remote-containers-0.299.0\dist\spec-node\devContainersSpecCLI.js:2024:3833) [23166 ms] at async Yf (c:\Users\IT\.vscode\extensions\ms-vscode-remote.remote-containers-0.299.0\dist\spec-node\devContainersSpecCLI.js:2024:4775) [23166 ms] at async Dne (c:\Users\IT\.vscode\extensions\ms-vscode-remote.remote-containers-0.299.0\dist\spec-node\devContainersSpecCLI.js:2156:12193) [23166 ms] at async Sne (c:\Users\IT\.vscode\extensions\ms-vscode-remote.remote-containers-0.299.0\dist\spec-node\devContainersSpecCLI.js:2156:11934) [23176 ms] Exit code 1 [23180 ms] Command failed: C:\Users\IT\AppData\Local\Programs\Microsoft VS Code\Code.exe --ms-enable-electron-run-as-node c:\Users\IT\.vscode\extensions\ms-vscode-remote.remote-containers-0.299.0\dist\spec-node\devContainersSpecCLI.js up --user-data-folder c:\Users\IT\AppData\Roaming\Code\User\globalStorage\ms-vscode-remote.remote-containers\data --container-session-data-folder /tmp/devcontainers-f9b48955-34b9-42ed-b7eb-f5c37f6b7fb61689235866772 --workspace-folder c:\Users\IT\Documents\gys_test --workspace-mount-consistency cached --id-label devcontainer.local_folder=c:\Users\IT\Documents\gys_test --id-label devcontainer.config_file=c:\Users\IT\Documents\gys_test\.devcontainer\devcontainer.json --log-level debug --log-format json --config c:\Users\IT\Documents\gys_test\.devcontainer\devcontainer.json --default-user-env-probe loginInteractiveShell --mount type=volume,source=vscode,target=/vscode,external=true --skip-post-create --update-remote-user-uid-default on --mount-workspace-git-root true [23180 ms] Exit code 1
核心问题分析
docker-compose.yml语法错误:
db服务的volumes字段缩进错误,未归属于db服务下- 使用
//注释,Docker Compose仅支持#作为注释符号 pgadmin端口映射错误,将80端口(pgadmin默认端口)映射到主机5432,与PostgreSQL默认端口冲突
devcontainer.json配置冲突:
- 使用
dockerComposeFile时,runArgs中添加的run --service-ports --rm python-app属于冗余命令,Dev Containers会自动管理容器启动逻辑,该参数会导致命令执行冲突 workspaceFolder设置为/workspace,但docker-compose.yml中python-app的挂载路径为./:/app,路径不匹配导致VSCode无法识别工作区文件
- 使用
容器运行逻辑问题:
overrideCommand: true会覆盖容器默认启动命令,若没有指定持续运行的命令,容器会启动后立即退出,导致Dev Containers连接失败
修复步骤
1. 修正docker-compose.yml
version: '3' services: db: image: postgres:14.8 restart: unless-stopped # 替换//为#注释 environment: POSTGRES_USER: <user> POSTGRES_PASSWORD: <password> POSTGRES_DB: <db> volumes: # 缩进归到db服务下 - ./postgres-data:/var/lib/postgresql/data pgadmin: image: dpage/pgadmin4 restart: always environment: PGADMIN_DEFAULT_EMAIL: <email> PGADMIN_DEFAULT_PASSWORD: <password> ports: - 5050:80 # 修改主机端口为5050,避免与PostgreSQL冲突 depends_on: - db python-app: build: context: . dockerfile: Dockerfile restart: always volumes: - .:/workspace # 与devcontainer的workspaceFolder保持一致 depends_on: - db
2. 修正devcontainer.json
{ "name": "Test development env", "dockerComposeFile": "./docker-compose.yml", "service": "python-app", "workspaceFolder": "/workspace", "settings": { "files.eol": "\n", "python.languageServer": "Pylance", "python.formatting.provider": "black", "editor.formatOnSave": true, "files.exclude": { "**/__pycache__": true, "**/.pytest_cache": true, "**/.venv": true, "**/*.egg-info": true }, "python.pythonPath": "/usr/local/bin/python", "python.testing.pytestPath": "/usr/local/bin/pytest", "python.testing.pytestEnabled": true, "python.testing.autoTestDiscoverOnSaveEnabled": true, "python.linting.ignorePatterns": [ ".vscode/", "**/site-packages/", "**/__pycache__/", "**/.pytest_cache/", "**/*.egg-info" ] }, "extensions": [ "ms-python.vscode-pylance", "mhutchie.git-graph" ], "remoteUser": "vscode", "containerUser": "vscode", // 移除冗余的runArgs参数 "overrideCommand": false, // 保留容器默认启动命令,确保容器持续运行 "postCreateCommand": "pip install -U --force-reinstall -e ." }
3. 清理并重新构建
- 停止并删除旧容器:
docker-compose down - (可选)清理旧镜像和缓存:
docker-compose rm -f - 在VSCode中打开命令面板(Ctrl+Shift+P),选择Dev Containers: Reopen in Container重新启动容器
额外注意事项
- Python应用中数据库连接地址需改为
db:5432,Docker Compose会自动解析服务名到对应容器IP - 确保主机
postgres-data目录有读写权限,避免PostgreSQL容器无法写入数据 - 若问题仍存在,可尝试更新Dev Containers扩展到最新版本,或重启Docker服务
内容的提问来源于stack exchange,提问作者dtamab
相关产品推荐
相关产品推荐

