拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Nginx Proxy Manager 如何用共享 Docker 网络代理内部容器服务:免发布上游端口与 Portainer 示例

Nginx Proxy Manager 如何用共享 Docker 网络代理内部容器服务免发布上游端口与 Portainer 示例【免费下载链接】nginx-proxy-managerDocker container for managing Nginx proxy hosts with a simple, powerful interface项目地址: https://gitcode.com/GitHub_Trending/ng/nginx-proxy-manager如果你的上游服务比如 Portainer也运行在与 Nginx Proxy ManagerNPM相同的 Docker 宿主机上通常需要在每个上游服务的docker-compose.yml里把端口发布到宿主机的所有接口上代理流量才能进去。官方文档给出了一个更收敛的做法为 NPM 和这些上游服务创建一个共享的自定义 Docker 网络上游服务不再发布任何端口只通过这个内部网络被 NPM 访问。本文按 docs/src/advanced-config/index.md 中 Best Practice: Use a Docker network 一节的步骤走一遍从建网络、改 compose 文件到在 NPM 界面创建代理主机的完整路径并以文档中的 Portainer 为例。适用前提文档原文限定上游服务以 Docker 方式运行在与 NPM 相同的 Docker 宿主机上。只有 NPM 已经按 docs/src/setup/index.md 的方式在 Docker 中跑起来时才需要执行下面的操作。创建共享 Docker 网络在宿主机上执行docker network create scoobydooscoobydoo只是文档中的示例网络名你可以换成自己的名字但后面 compose 文件里的name:字段必须与之保持一致。把 NPM 和上游服务都挂到这个网络文档的要求是把这个网络配置加到NPM 的docker-compose.yml以及同一 Docker 宿主机上每个相关服务的docker-compose.yml中networks: default: external: true name: scoobydoo这样这些容器的默认网络都指向这个外部网络NPM 与上游服务之间可以直接按服务名互通而上游服务不需要在宿主机接口上发布端口——这就是免发布上游端口的效果来源。Portainer 示例一个不发布任何端口的上游服务下面这份 compose 文件来自官方文档服务本身没有ports段services: portainer: image: portainer/portainer privileged: true volumes: - ./data:/data - /var/run/docker.sock:/var/run/docker.sock restart: unless-stopped networks: default: external: true name: scoobydoo文档说明了两个关键点Portainer 的 Docker 镜像自身已经 expose 了9000端口所以在 compose 里看不到ports段也能被代理该端口在 Docker 网络之外不可达即从宿主机/外部无法直接访问只能经由 NPM 代理进入。在 NPM 界面创建代理主机服务名会被直接用作主机名所以在 NPM 的 Admin UI 里创建 Proxy Host 时Host name上游主机名portainer即 compose 中的服务名Port上游端口9000。文档明确提醒既然服务名充当主机名同一网络内的服务名必须唯一重名会导致上游指向混乱。验证与限制判断这个方案是否按预期工作文档给出的依据有两点上游服务的端口不出现在其docker-compose.yml中也没有发布到 Docker 宿主机的接口上但在 NPM 网络内部可达——以上面的 Portainer 为例9000就是这样被 NPM 代理到外部域名的在 NPM 界面按上述portainer9000创建代理主机后即可通过你配置的对外域名访问 Portainer。需要遵守的边界该做法只适用于上游服务与 NPM 在同一 Docker 宿主机上以 Docker 运行的情况同一网络内的服务名必须保持唯一如果同一宿主机上 IPv6 未启用导致日志出现Address family not supported by protocol可在 NPM 的 compose 中添加DISABLE_IPV6: true环境变量这是 docs/src/advanced-config/index.md 中给出的处理方式与网络配置相互独立。完成以上步骤后NPM 就是这些内部容器服务对外的唯一入口上游端口不再暴露给宿主机网络。如果之后还需要更细粒度的 Nginx 行为调整docs/src/advanced-config/index.md 的 Custom Nginx Configurations 一节介绍了/data/nginx/custom下的自定义配置片段挂载点可按需查阅。【免费下载链接】nginx-proxy-managerDocker container for managing Nginx proxy hosts with a simple, powerful interface项目地址: https://gitcode.com/GitHub_Trending/ng/nginx-proxy-manager创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门