You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一服务器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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:25:31