我有一个应用程序正在用户定义的docker网络中创建一些容器。
当前,我已将一些端口从该网络中的某些容器中转发(映射)了一些端口(已映射)到主机,以便可以从主机访问它们。容器之间(容器到容器)之间的交互是通过网络中定义的别名进行的。
不幸的是,主机的映射端口在我的主机上公开暴露了。是否有一种方法只能从主机的 localhost 访问这些映射的端口?
答案 0 :(得分:4)
如果您使用docker run -p [端口号]:[端口号]转发端口,则可以使用:
docker run -p 127.0.0.1:80:80 container
代替:
docker run -p 80:80 container
默认情况下,Docker在所有可用接口上公开您的端口。
答案 1 :(得分:0)
如果您使用的是Linux,则可以使用iptables。
iptables -A INPUT -p tcp -s localhost --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j DROP
只需为所需的端口更改8080
,然后为要暴露的每个端口多次运行它即可。
第一个命令是“从本地主机到端口8080的所有内容都允许”,第二个命令是“丢弃任何从8080端口来的内容”
此更改不是永久性的,重新启动后将重置,但可以使用以下方式保存:
iptables-save > /etc/iptables.conf
并使用以下命令将其还原:
iptables-restore < /etc/iptables.conf