You need to enable JavaScript to run this app. Docker部署Django项目dbi5k数据库连接被拒绝如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Django项目dbi5k数据库连接被拒绝如何解决

问题原因及修复方案

核心问题1:web服务未声明对dbi5k的依赖与网络访问权限

你的docker-compose.yml中web服务的depends_on和links配置仅包含了db服务,没有添加dbi5k:

  • 没有在depends_on中声明dbi5k时,docker-compose可能会先启动web服务,此时dbi5k容器还未完成启动
  • 你使用的docker-compose配置中links用于控制容器间的网络互通,未配置dbi5k的links时web容器无法解析dbi5k的服务域名

修复docker-compose.yml的web服务配置:

web:
  build: .
  command: python manage.py runserver 0.0.0.0:8000
  volumes:
    - .:/code
  ports:
    - "8000:8000"
  depends_on:
    - db
    - dbi5k # 新增dbi5k依赖声明
  links:
    - db
    - dbi5k # 新增dbi5k网络链路配置

核心问题2:PostgreSQL容器初始化延迟

depends_on仅保证容器的启动顺序,不会等待PostgreSQL内部的数据库初始化、端口监听完成。PostgreSQL首次启动需要创建用户、数据库、初始化数据目录,耗时较长,此时web服务启动时数据库还没有就绪,也会报连接拒绝错误。

修复方案:

修改web服务启动逻辑,等待dbi5k的5432端口就绪后再启动Django:

  1. 先在容器中安装端口检测工具,修改Dockerfile,在RUN pip install -r requirements.txt行之后新增:
RUN apt-get update && apt-get install -y netcat && rm -rf /var/lib/apt/lists/*
  1. 修改docker-compose.yml的web启动命令:
command: >
  bash -c "
  until nc -z dbi5k 5432; do
    echo '等待dbi5k数据库就绪...'
    sleep 2
  done &&
  python manage.py runserver 0.0.0.0:8000
  "

可选检查项

确认Django启动时加载的配置文件是你修改的settings.py,如果启动时指定了--settings=i5k.settings_prod参数,需要同步修改settings_prod.py中的数据库配置指向dbi5k。

内容的提问来源于stack exchange,提问作者user977828

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 05:45:04