我有一个应用程序在用户定义的docker网络中创建几个容器。
目前,我已将该网络中某些容器的少数端口转发(映射)到主机,以便我可以从主机访问它们。容器(容器与容器)之间的交互通过网络中定义的别名发生。
不幸的是,主机的映射端口公开在我的主机上。有没有办法只能从我的主机的本地主机访问这些映射的端口?
如果您使用docker run -p [port-number]:[port-number]转发端口,您可以使用:
docker run -p 127.0.0.1:80:80 container
代替:
docker run -p 80:80 container
默认情况下,Docker会在所有可用接口上公开您的端口。
如果你在Linux上,你可以使用iptables。
iptables -A INPUT -p tcp -s localhost --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP
只需将8080
更改为您想要的端口,并为您正在公开的每个端口多次运行它。
第一个命令是“从localhost到端口8080允许它的任何东西”,第二个命令是“丢弃任何进入8080端口的东西”
此更改不是永久性的,它会在重新启动后重置,但您可以使用以下命令进行保存:
iptables-save > /etc/iptables.conf
并恢复它:
iptables-restore < /etc/iptables.conf