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

Docker部署Dash应用报postgres主机名无法解析问题排查

错误产生原因

这个报错和postgres服务本身的配置无关,不需要调整postgres相关配置项,核心原因是Docker网络隔离:

  • 你当前是通过独立的docker run命令启动Dash应用容器,这个容器默认接入Docker的默认bridge网络,和docker-compose创建的服务网络完全隔离
  • docker-compose中配置的postgres主机名是Docker内置DNS为同一compose网络内容器提供的服务发现域名,只有加入该compose网络的容器才能解析这个域名,你单独启动的容器不在这个网络里,自然无法将postgres解析为对应IP,就会抛出找不到主机的错误
  • 额外注意:你原有Dockerfile里的gunicorn启动路径也有问题,从compose的卷挂载配置看,py_scripts目录在容器内的路径是/opt/airflow/py_scripts,直接写/py_scripts.index:server会触发模块找不到的错误。
修复方案

推荐直接把Dash应用作为服务加入现有docker-compose配置,不需要单独执行docker run启动,步骤如下:

  • 在docker-compose.yaml的services块下新增dash-app服务配置,直接复用已有的airflow公共配置,保证环境变量、卷挂载、网络、服务依赖都和其他airflow组件一致:
dash-app:
    <<: *airflow-common
    command: gunicorn -b 0.0.0.0:8050 /opt/airflow/py_scripts.index:server
    ports:
      - 8050:8050
    restart: always
  • 调整你的Dockerfile,不需要在Dockerfile里写死CMD,因为compose里已经配置了启动命令,Dockerfile保留基础镜像配置即可:
FROM airflow-update
  • 重新启动compose栈即可:docker-compose up -d,启动后dash-app服务和postgres在同一个网络内,可正常解析postgres主机名连接数据库。

如果你坚持要用单独的docker run命令启动,需要先查询compose创建的默认网络名(一般格式为[compose文件所在文件夹名]_default,可通过docker network ls查看),启动时指定接入该网络,同时补全所有必要的环境变量和卷挂载,操作繁琐容易漏配置,不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 10:33:28