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

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

据我所知,这忽略了任何EXPOSE / -—expose声明。 它们只在—-icc设置为false —-icc被执行。

  • 那么我们为什么要把端口暴露在第一位呢?
  • 或者为什么不把ICC设置为默认?

你是对的。 EXPOSE命令实际上只是元数据。 它logging了开发人员可以在给定端口上联系容器的意图。 所有的构build指令本身就是把这个元数据添加到图像中。

正如你自己和读者已经注意到的那样,当-P标志和链接被调用时,Docker使用这个信息。

我认为Docker在很大程度上采取的立场是,当容器运行在自己的专用networking上时,在大多数情况下,他们将相互信任,只允许所有的通信是最简单的。

如果禁用ICC,则必须设置--iptables标志(允许--iptables编辑iptables)并使用链接允许容器进行通信。 我怀疑dynamic编辑iptables是Docker工程师想要尽可能远离的东西。 而且,由于链接的限制,某些设置变得不可能,例如你不能有双向链接。