下面介绍怎么使用iptables映射docker容器里面的端口到宿主机器;
1、当我们初始化docker容器没有映射端口到宿主服务器的时候,我们常做的方法是:
(1)、删除容器重新初始化容器和映射端口
(2)、可以使用iptables来映射端口
2、执行下面命令显示没有映射nginx端口到主机的容器:docker ps
19666ec5e857 nginx "/docker-entrypoint.…" 53 minutes ago Up 53 minutes 80/tcp goofy_lederberg
root@host38:/home/hgh# docker inspect 19666ec5e857 | grep -i Add
"CapAdd": null,
"GroupAdd": null,
"LinkLocalIPv6Address": "",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"GlobalIPv6Address": "",
"IPAddress": "172.17.0.2",
"MacAddress": "02:42:ac:11:00:02",
"IPAddress": "172.17.0.2",
"GlobalIPv6Address": "",
"MacAddress": "02:42:ac:11:00:02",
上面红色字体的ip就是容器的ip地址。
我们可以使用下面命令端口映射:
iptables -t nat -A PREROUTING -p tcp -d 172.17.159.38 --dport 81 -j DNAT --to 172.17.0.2:80
//如果服务器没有固定ip可以执行这句话,MASQUERADE是伪造
iptables -t nat -A POSTROUTING -p tcp -d 172.17.0.2 --dport 80-j MASQUERADE
//执行MASQUERADE后,就不用执行这句了
iptables -t nat -A POSTROUTING -p tcp -d 172.17.0.2 --dport 80 -j SNAT --to 172.17.159.38
非特殊说明,本文版权归HPay所有,转载请注明出处.
本文类型: Java工具