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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:06:03