【发布时间】:2020-12-06 06:26:34
【问题描述】:
我有一个独特的 Docker 问题。我正在开发一个需要连接到多个 Docker 容器的应用程序。要点是,此应用程序将使用 Docker SDK 启动容器并根据需要连接到它们。
但是,由于应用程序的性质,我们应该假设这些容器中的每一个都受到损害且不安全。因此,我需要将它们与主机网络分开(这样它们就无法访问我的设备和 WAN)。我仍然有需要从我的应用程序连接到它们的限制。
macOS networking stack doesn't support connecting to a docker network 是一个众所周知的问题。通常,我会通过暴露我需要的端口来解决这个问题。但是,这在我的应用程序中是不可能的,因为我在 Docker 中使用内部网络。
我想完成类似以下的事情。想象一下 Container 2 和 Container 3 在它们自己的私有内部网络上。主机(不是容器)控制着 Docker SDK,可以查询它们的内部 IP。因此,它可以轻松地连接到这些机器,而无需将该网络暴露给主机的网络。幸运的是,这种设置适用于 Linux。不过,我想提出一个适用于 macOS 的跨平台解决方案。
【问题讨论】:
-
Docker Desktop for Mac 秘密运行 Linux VM;您可以在自己的虚拟机中运行整个应用程序堆栈 (a) 以更直接地控制网络,以及 (b) 进一步将容器与外部环境隔离。
-
这是个好主意,我也想过,但我希望有更好的解决方案。 Host -> VM -> Docker 听起来像是一个非常缓慢的解决方案,但如果我错了,请纠正我。这是我正在考虑的事情:我可以将控制 SDK 的应用程序容器化,为其提供两个网络,主机和内部网络,并为 Docker 提供套接字,以便它可以启动其他容器。当然,如果容器被攻击,那就是坏消息了,攻击者可以使用 SDK 来启动容器,但这与被攻击的 docker 主机有什么区别呢?
-
我认为,如果您的个人机器(您使用的终端)不是 linux,那么任何 docker 容器都会以“主机 -> 虚拟机 -> Docker”的形式运行。我不知道如何访问虚拟机..
-
在深入研究之前,您是否尝试过使用
--internal选项创建网络?很确定这将阻止允许通过主机的“真实”接口进行连接的主机 NAT 规则stackoverflow.com/a/42336592/1987437 -
是的,这是我用来隔离容器的。但现在,我需要一种从我的 macOS 机器上连接到它的方法。
标签: docker networking