docker - 多平台 Docker 内部网络从主机连接

我有一个独特的 Docker 问题。我正在开发一个需要连接到多个 Docker 容器的应用程序。要点是,此应用程序将使用 Docker SDK 启动容器并根据需要连接到它们。

但是,由于应用程序的性质,我们应该假设这些容器中的每一个都受到损害并且不安全。因此,我需要将它们与主机网络分开(这样它们就无法访问我的设备和 WAN)。我仍然需要从我的应用程序连接到它们。

macOS networking stack doesn't support connecting to a docker network 是一个众所周知的问题.通常,我会通过公开我需要的端口来解决这个问题。但是,这对于我的应用程序是不可能的,因为我正在使用带有 Docker 的内部网络。

我想完成类似下面的事情。假设容器 2 和容器 3 在它们自己的私有(private)内部网络上。主机(不是容器)正在控制 Docker SDK 并可以查询其内部 IP。因此,它可以轻松连接到这些机器,而无需将此网络暴露给主机的网络。幸运的是,这种设置适用于 Linux。但是,我想提出一个适用于 macOS 的跨平台解决方案。

最佳答案

我也遇到过类似情况。我最终做的是:

  • 该应用程序管理动态容器到端口的映射(只是一个哈希表)。
  • 当我的应用程序(在主机上)想要启动一个容器时,它会在预定义的范围内(例如 28000-29000)找到一个未使用的端口。
  • 一旦有了端口,它就会将容器的端口映射到预定范围内的某个端口(例如 -p 28003:80 )。
  • 当我的应用需要引用容器时,它使用 localhost:<port> (例如 localhost:28001 )。

事实证明代码并不多,但如果你走那条路,请确保封装你引用容器的方式(即不要硬编码主机名和端口,使用生成字符串)。

总而言之,您确实应该使用 VM 部署选项进行一些测试,然后再将其排除为速度太慢。

https://stackoverflow.com/questions/65165332/

相关文章:

delphi - Delphi Sydney 10.4.1 上的 QuickReport

c++ - 如何使用 GDB 进入一个函数而不是它的参数

javascript - 如何按表头单击对数组进行排序

amazon-web-services - 如何在外部公开 NATS 服务器

javascript - Tailwind CSS 不能用 React 和 Express 编译?

css - 以厘米(或英寸)为单位的窗口大小的媒体查询

c - 构建静态库并在编译时将其链接到内核模块

flutter - SuffixIcon 不适用于 AutoCompleteTextField

javascript - 未捕获的 ReferenceError,Splide 未在 HTMLDoc

ios - 如何在 SwiftUI 中删除 `Form` 的左右填充?