为什么 Docker 中的容器间通信是默认的?

lue*_*ken 5 docker

我正在阅读有关 Docker 容器之间通信的一些内容。该-—icc标志让所有容器相互通信。该标志默认设置为 true。

据我了解,这会忽略任何EXPOSE/-—expose声明。它们仅在—-icc设置为 false时强制执行。

  • 那么为什么我们首先要暴露端口呢?
  • 或者为什么没有将 ICC 设置为 false 作为默认值?

Adr*_*uat 3

你说得对。该EXPOSE命令实际上只是元数据。它记录了开发人员的意图,即可以在给定端口上联系容器。就其本身而言,构建指令所做的就是将此元数据添加到图像中。

-P正如您和 larsks 所指出的,当调用标志和链接时,Docker 使用此信息。

我认为 Docker 在很大程度上采取的立场是,当容器在自己的专用网络上运行时,在大多数情况下它们会相互信任,并且最简单的方法是允许所有通信。

如果禁用 ICC,则必须设置--iptables标志(允许 docker 编辑 iptables)并使用链接来允许容器进行通信。我怀疑 Docker 工程师希望尽可能远离动态编辑 iptables。此外,由于链接的限制,某些设置变得不可能,例如您不能拥有双向链接。