AWS EC2实例中Docker Compose绑定私有IP端口无效问题排查
问题根源与解决办法
你的核心问题在于同时使用了network_mode: host和ports配置,这两者存在冲突:
- 当开启
network_mode: host时,容器会直接共享主机的网络栈,Docker的端口映射机制完全失效。容器内的服务会默认绑定主机的所有网络接口(即0.0.0.0),所以不管是公网弹性IP、私有IP还是127.0.0.1,都能访问到容器的81端口,这和你设置ports: "10.10.100.100:81:81"的预期完全相反。
正确解决方案
方案1:使用默认bridge网络(推荐)
直接移除network_mode: host配置,让Docker使用默认的bridge网络。此时ports配置会生效,Docker会在主机的私有IP10.10.100.100上监听81端口,仅将该IP的流量转发到容器。修改后的docker-compose.yml如下:
version: '3.8' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped container_name: npm ports: - "10.10.100.100:81:81" # 仅绑定到私有IP
重启容器后,只有通过10.10.100.100:81才能访问服务,公网IP和127.0.0.1:81都无法连接。
方案2:必须使用host网络时的处理
如果因特殊需求必须使用host网络,需要修改容器内部服务的监听配置,让服务只绑定到私有IP:
- 对于Nginx Proxy Manager,找到容器内
/etc/nginx目录下的配置文件,把所有监听81端口的规则从listen 81;改成listen 10.10.100.100:81;。 - 也可以通过挂载自定义配置文件到容器内,覆盖默认配置,确保服务仅监听私有IP。
内容的提问来源于stack exchange,提问作者cybertoast
相关产品推荐
相关产品推荐

