这个坑花了我大量时间,简单来讲,就是有一个服务,在 Docker 内监听的方式是这样的
我们在执行 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 默认开启,还影响了我的判断。
总之总算可以了 - -。