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:
- 先在容器中安装端口检测工具,修改Dockerfile,在
RUN pip install -r requirements.txt行之后新增:
RUN apt-get update && apt-get install -y netcat && rm -rf /var/lib/apt/lists/*
- 修改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
相关产品推荐
相关产品推荐

