【发布时间】:2019-04-15 21:21:44
【问题描述】:
我有一个应用程序正在用户定义的 docker 网络中创建一些容器。
目前我已经从该网络中的一些容器转发(映射)几个端口到主机,以便我可以从主机访问它们。容器之间的交互(容器到容器)是通过网络中定义的别名进行的。
不幸的是,到主机的映射端口在我的主机上公开。有没有办法只能从我的主机的 localhost 访问这些映射的端口?
【问题讨论】:
我有一个应用程序正在用户定义的 docker 网络中创建一些容器。
目前我已经从该网络中的一些容器转发(映射)几个端口到主机,以便我可以从主机访问它们。容器之间的交互(容器到容器)是通过网络中定义的别名进行的。
不幸的是,到主机的映射端口在我的主机上公开。有没有办法只能从我的主机的 localhost 访问这些映射的端口?
【问题讨论】:
如果你使用 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
【讨论】: