Ubuntu 下使用 Docker 时,将绑定了 127.0.0.1 的监听端口开放到公网

这个坑花了我大量时间,简单来讲,就是有一个服务,在 Docker 内监听的方式是这样的

image

我们在执行 docker run 时,就算加上 -p 参数将端口映射出来,也无法在外部连接。

这个坑的原理就不说了,说下解决办法。

首先,在执行 docker run 时,设置 --network 参数为 “host”

然后执行以下命令先设置基础环境

sysctl -w net.ipv4.conf.all.route_localnet=1
sysctl -w net.ipv4.ip_forward=1

然后将需要开放的端口范围加入防火墙

ufw allow 8000:9000/tcp

再修改 ufw 文件

vi /etc/ufw/before.rules

在 *filter 前加入如下内容开启端口转发

# Port Mapping
*nat
:PREROUTING ACCEPT [0:0]
-A PREROUTING -i eth0 -p tcp --dport 8000:9000 -j DNAT --to 127.0.0.1:8000-9000
COMMIT

最后执行

ufw reload

即可完成配置~

说起来简单,试过很多办法。。浪费了起码24个小时来搞这个。

中间 ufw 默认开启,还影响了我的判断。

总之总算可以了 - -。