我正在阅读一些关于 Docker 容器之间的通信的内容。 -—icc
flag 让所有容器相互通信。默认情况下,该标志设置为 true。
据我了解,这忽略了任何 EXPOSE
/-—expose
声明。它们仅在 —-icc
时被强制执行。设置为假。
请您参考如下方法:
你是对的。 EXPOSE
命令实际上只是元数据。它记录了开发人员可以在给定端口上联系容器的意图。就其本身而言,所有构建指令所做的就是将此元数据添加到图像中。
正如您自己和 larsks 所指出的,Docker 在 -P
时使用此信息。标志和链接被调用。
我认为 Docker 在很大程度上采取的立场是,当容器在自己的私有(private)网络上运行时,在大多数情况下它们会相互信任,并且只允许所有通信是最简单的。
如果禁用 ICC,则必须设置 --iptables
标志(允许 docker 编辑 iptables)并使用链接来允许容器通信。我怀疑 iptables 的动态编辑是 Docker 工程师希望尽可能远离的事情。此外,由于链接的限制,某些设置变得不可能,例如您不能拥有双向链接。