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

Flask应用Docker部署连接PostgreSQL报错:无法解析主机名'db'

解决psycopg2.OperationalError: could not translate host name "db" to address问题

错误原因

你单独使用docker run启动backend容器时,它处于Docker默认的bridge网络中,而你的PostgreSQL服务(db)是通过docker-compose启动在专属自定义网络里的。两个容器不在同一网络,导致backend无法解析db这个主机名。

解决方案

方案1:使用docker-compose启动整个服务(推荐)

直接用docker-compose管理所有服务,这样所有容器会自动加入同一个网络,服务名可直接解析:

  1. 修正docker-compose.yml中backend的依赖配置(将depends_on从pgadmin改为db,保证db优先启动):
    services:
      backend:
        # ...其他原有配置
        depends_on:
          - db  # 替换原有的pgadmin依赖
        # 可移除links配置,自定义网络已支持服务名解析
    
  2. 启动所有服务:
    docker-compose up --build
    
  3. 访问应用时使用8000端口(对应docker-compose里的8000:8000端口映射)。

方案2:手动将单独启动的容器加入docker-compose网络

如果一定要单独运行backend镜像,需要把它加入db所在的网络:

  1. 查看docker-compose创建的专属网络:
    docker network ls
    
    找到对应项目的网络,名称通常为{你的项目目录名}_default。
  2. 先启动db服务:
    docker-compose up -d db
    
  3. 启动backend容器时指定加入该网络:
    docker run -p 5000:5000 --network {网络名称} employee-manager
    

额外优化建议

  • 移除db服务中的hostname: postgres配置,docker-compose的服务名db已可作为主机名被其他容器解析。
  • 确保数据库连接字符串中的密码、数据库名与docker-compose里的环境变量完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:06:27