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

无法通过NginxProxyManager(NPM)Web UI实现Docker容器服务转发

解决Nginx Proxy Manager转发到Docker容器应用的问题

1. 核心前提:容器需在同一Docker网络

Docker容器默认的bridge网络无法让不同容器直接通过容器名通信,必须将NPM和目标应用容器加入同一个自定义网络:

  • 创建自定义网络:
    docker network create proxy-net
    
  • 把两个容器加入该网络(如果用docker-run启动):
    # 重启NPM容器并加入网络
    docker run --network proxy-net [你的NPM容器启动参数]
    # 重启目标应用容器并加入网络
    docker run --network proxy-net --name my-app [你的应用容器启动参数]
    
  • 如果用docker-compose,在两个服务配置中添加networks字段:
    version: '3'
    services:
      npm:
        image: jc21/nginx-proxy-manager:latest
        ports:
          - 80:80
          - 81:81
          - 443:443
        networks:
          - proxy-net
      my-app:
        image: [你的应用镜像]
        container_name: my-app
        networks:
          - proxy-net
    networks:
      proxy-net:
        external: true # 若已手动创建网络则加此句,否则删除让compose自动创建
    

2. 修正NPM转发配置

对照你的配置截图,重点检查:

  • 转发目标:必须填写my-app:3000(容器名+应用内部端口,不是宿主机的3000端口)
  • Scheme选项:根据应用服务类型选http或https
  • 辅助设置:勾选「Websockets支持」(若应用用到websocket),将「转发主机头」设为$host或www.my-app.com

3. 验证容器间连通性

进入NPM容器内部,测试能否访问目标应用:

# 进入NPM容器
docker exec -it [NPM容器名] /bin/sh
# 测试容器连通性
ping my-app
# 测试应用是否可访问
curl http://my-app:3000

如果ping不通,说明网络配置有误;如果curl返回应用内容,说明网络正常,问题出在NPM转发规则或外部访问链路。

4. 检查外部访问链路

  • 域名解析:在本地执行nslookup www.my-app.com,确认解析结果为服务器公网IP
  • 防火墙/安全组:开放服务器80、443端口:
    ufw allow 80/tcp
    ufw allow 443/tcp
    ufw reload
    
    同时检查云服务商安全组,开放80、443端口的入站规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:36:13