Windows 10 Docker Desktop部署Django/Postgres遇套接字网络错误求助
解决方案
一、解决Docker Desktop的OTEL遥测错误
这个错误是Docker Desktop自身遥测服务连接失败导致的,和你的Django项目无关,可通过以下方式解决:
关闭遥测功能
打开Docker Desktop,进入「设置」>「隐私与安全」,取消勾选「向Docker发送使用统计数据」和「向Docker发送诊断数据」,重启Docker Desktop。修改配置文件禁用OTEL
在C:\Users\<你的用户名>\.docker\目录下创建或编辑daemon.json文件,添加以下内容:{ "metrics-addr": "0.0.0.0:0", "experimental": false }保存后重启Docker Desktop,即可阻止OTEL相关的连接尝试。
二、解决Django与Postgres的「Connection refused」错误
结合你的docker-compose.yml和项目配置,以下是关键修正点:
1. 修正端口映射不匹配问题
你的Web服务中,Django运行在容器内的8000端口,但端口映射写的是8080:8080,导致端口不匹配引发连接问题。修改Web服务的端口映射:
web: # ... 其他配置不变 ports: - "8080:8000" # 外部8080端口映射到容器内8000端口
2. 确保Postgres服务就绪后启动Django
depends_on仅保证启动顺序,不确保Postgres完全就绪。给Postgres添加健康检查,并让Web服务等待其就绪:
db: # ... 其他配置不变 healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -p 5434"] interval: 5s timeout: 5s retries: 5 web: # ... 其他配置不变 depends_on: db: condition: service_healthy
3. 修正Django数据库配置
在项目的settings.py中,确保数据库配置与docker-compose.yml中的Postgres参数一致:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'dbName', 'USER': 'postgres', 'PASSWORD': 'pw', 'HOST': 'db', # 对应docker-compose中db服务的名称 'PORT': '5434', # 对应PGPORT环境变量设置的端口 } }
4. 验证Dockerfile配置
确保你的项目根目录下有正确的Dockerfile,示例如下:
FROM python:3.12-slim WORKDIR /dcpProject COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8000 CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
完成以上修正后,执行docker-compose down清理旧容器,再重新运行docker-compose up即可。
内容的提问来源于stack exchange,提问作者Natalie
相关产品推荐
相关产品推荐

