docker-compose部署的nginx反向代理时无法连接同栈nodejs服务报111错误
问题原因&解决步骤
1. 优先排查Node服务监听地址(90%以上该场景问题的根因)
你在md_license_server容器内访问localhost:3005正常,不代表其他容器能访问:如果你的Node服务启动时绑定的是127.0.0.1:3005,只有容器本地回环地址能访问,跨容器请求会被直接拒绝。
修改Node服务启动配置,将监听地址改为0.0.0.0即可,以Express为例:
// 错误写法 app.listen(3005, '127.0.0.1', () => {}) // 正确写法 app.listen(3005, '0.0.0.0', () => {})
其他Node框架(Koa、Egg等)同理修改监听地址参数。
2. 确认容器互通配置
docker-compose默认会为服务创建专属网桥,无需额外配置hosts,你可以做以下验证+优化:
- 先验证网络连通性:执行
docker-compose exec nginx curl http://md_license_server:3005/ping,如果返回正常说明网络无问题,走下一步排查Nginx配置;如果返回连接拒绝就是第一步的监听地址问题。 - 可在docker-compose.yml的nginx服务下添加links配置,保证主机名解析正常:
version: "3.3" services: md_license_server: image: root/md-license-server expose: - 3005 ports: - 3005:3005 nginx: image: nginx:latest container_name: nginx ports: - 80:80 - 443:443 volumes: - /etc/ssl/certs:/etc/ssl/certs - /etc/ssl/private:/etc/ssl/private - /root/docker/nginx.conf:/etc/nginx/nginx.conf # 添加以下配置 links: - md_license_server
3. 修正Nginx配置匹配逻辑
从错误日志看,请求命中的server是localhost,没有匹配到你配置的server_name licensing.cluster-ops.co对应的server块,导致走了默认server配置。可以修改nginx.conf将该服务设为默认响应:
worker_processes 1; events { worker_connections 1024; } http { server { listen 80 default_server; # 新增default_server标记,所有未匹配域名的80请求都会走这个块 server_name licensing.cluster-ops.co; location / { proxy_pass http://md_license_server:3005; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
修改完成后执行docker-compose restart nginx重启Nginx容器即可生效。
内容的提问来源于stack exchange,提问作者user11420374
相关产品推荐
相关产品推荐

