同一服务器Docker容器中PostgreSQL与Django连接被拒绝求助
Django容器连接PostgreSQL容器失败:Connection refused
报错信息
django.db.utils.OperationalError: connection to server at "localhost" (127.0.0.1), port 6545 failed: Connection refused
Is the server running on that host and accepting TCP/IP connections?
connection to server at "localhost" (::1), port 6545 failed: Cannot assign requested address
Is the server running on that host and accepting TCP/IP connections?
配置信息
PostgreSQL容器配置
container_name: pg-docker ports: - "6545:5432" volumes: - ./data:/var/lib/postgresql/data networks: - default
Django容器配置(docker-compose.yml)
version: "3.9" services: django_api: build: context: ./app dockerfile: Dockerfile container_name: api-dev command: python manage.py runserver 0.0.0.0:8000 ports: - 8000:8000 networks: - default
问题原因
Django容器内的localhost指向容器自身,而非PostgreSQL容器。两个容器虽同属default网络,但用localhost无法跨容器访问PostgreSQL服务;同时错误使用了宿主机映射的端口6545,容器间通信应使用PostgreSQL容器内部的5432端口。
解决步骤
1. 修改Django数据库配置
在settings.py中更新数据库连接参数:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '你的数据库名称', 'USER': '数据库用户名', 'PASSWORD': '数据库密码', 'HOST': 'pg-docker', # 替换为PostgreSQL容器名 'PORT': '5432', # 使用容器内部端口 } }
2. 确认容器网络连通性
- 两个容器已配置
networks: - default,处于同一网络,Docker会自动通过容器名做DNS解析,无需额外网络配置。 - 若PostgreSQL是单独启动的容器,可手动确认网络归属:
docker inspect pg-docker | grep Networks docker inspect api-dev | grep Networks
3. 验证PostgreSQL服务状态
确保PostgreSQL容器正常运行且允许外部连接:
# 查看容器是否运行 docker ps | grep pg-docker # 进入容器检查监听配置 docker exec -it pg-docker psql -U 你的用户名 -c "SHOW listen_addresses;"
输出应为listen_addresses | *,表示允许所有IP访问(默认配置已开启)。
内容的提问来源于stack exchange,提问作者emin
相关产品推荐
相关产品推荐

