用户定义的Docker网络中的Docker容器-仅可从主机访问

时间:2019-04-15 13:06:32

标签: docker docker-networking

我有一个应用程序正在用户定义的docker网络中创建一些容器。

当前,我已将一些端口从该网络中的某些容器中转发(映射)了一些端口(已映射)到主机,以便可以从主机访问它们。容器之间(容器到容器)之间的交互是通过网络中定义的别名进行的。

不幸的是,主机的映射端口在我的主机上公开暴露了。是否有一种方法只能从主机的 localhost 访问这些映射的端口?

2 个答案:

答案 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