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
相关产品推荐
相关产品推荐

