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

Docker部署ERP时Nginx上游主机找不到问题求助

解决Docker部署ERP时Nginx上游主机找不到的问题

核心问题定位

Nginx日志中的host not found in upstream "erp-server"错误,根源是在Docker Compose自定义网络erp-net中,容器之间通过服务名实现DNS解析,但你的Nginx配置里写的erp-server并不是Docker Compose中ERP服务的实际名称。

分步解决

1. 修正Nginx代理配置

编辑nginx/nginx.conf,将代理目标的主机名从erp-server替换为Docker Compose里ERP服务的名称erp:

location /jshERP-boot/ {
        proxy_pass http://erp:9999/jshERP-boot/;
        proxy_set_header Host $host:$server_port;
}

修改后重新构建Nginx镜像并重启容器:

docker-compose build nginx
docker-compose up -d nginx

2. 处理ERP容器反复重启的问题

从容器状态可见erp容器持续重启,大概率是ERP服务启动时依赖的MariaDB或Redis尚未就绪导致启动失败,可通过以下配置优化:

  • 在docker-compose.yaml的erp服务中添加依赖声明,确保数据库和Redis启动后再启动ERP:
erp:
  image: erp:v1.0
  container_name: erp
  restart: always
  ports:
    - "9999:9999"
  networks:
    - erp-net
  depends_on:
    - mariadb
    - redis
  • (可选)添加健康检查,确保MariaDB和Redis真正就绪后再启动ERP:
    给mariadb和redis服务增加健康检查配置:
mariadb:
  image: erp-mariadb:v1.0 
  container_name: erp-mariadb
  restart: always
  ports:
    - "3306:3306"
  networks:
    - erp-net
  healthcheck:
    test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"]
    interval: 10s
    timeout: 5s
    retries: 3

redis:
  image: erp-redis:v1.0
  container_name: erp-redis
  restart: always
  ports:
    - "6379:6379"
  networks:
    - erp-net
  healthcheck:
    test: ["CMD", "redis-cli", "ping"]
    interval: 10s
    timeout: 5s
    retries: 3

同时修改erp服务的depends_on,等待依赖服务健康就绪:

erp:
  # 保留原有其他配置
  depends_on:
    mariadb:
      condition: service_healthy
    redis:
      condition: service_healthy

修改后重启所有服务:

docker-compose up -d

验证结果

执行命令查看容器状态:

docker ps | grep erp

若所有容器状态均显示Up,再访问http://<主机IP>:8080验证ERP系统是否可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:47:03