Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Docker中的容器间通信是默认的?_Docker - Fatal编程技术网

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

为什么Docker中的容器间通信是默认的?,docker,Docker,我正在读一些关于Docker容器之间通信的文章。--icc标志允许所有容器相互通信。默认情况下,该标志设置为true 据我所知,这会忽略任何EXPOSE/--EXPOSE声明。只有当--icc设置为false时,才会强制执行这些命令 那么,我们为什么要首先公开端口呢 或者为什么ICC没有设置为false作为默认值 你说得对。EXPOSE命令实际上只是元数据。它记录了开发人员可以在给定端口上联系容器的意图。就其本身而言,构建指令所做的全部工作就是将此元数据添加到映像中 正如您和larsks所指出

我正在读一些关于Docker容器之间通信的文章。
--icc
标志允许所有容器相互通信。默认情况下,该标志设置为true

据我所知,这会忽略任何
EXPOSE
/
--EXPOSE
声明。只有当
--icc
设置为false时,才会强制执行这些命令

  • 那么,我们为什么要首先公开端口呢
  • 或者为什么ICC没有设置为false作为默认值

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

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

      我假设Docker的立场是,当容器在自己的专用网络上运行时,在大多数情况下,它们会相互信任,最简单的方法是允许所有通信


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

      EXPOSE语句还可用于(a)通过
      -p
      自动发布端口和(b)链接容器时自动发现服务。EXPOSE命令实际上只是元数据,但根据我所说的,它在使用--link时使用,在
      --icc=false
      时使用iptables强制执行。让我感到困惑。默认情况下,将ICC设置为false会让很多新用户感到困惑。我不确定。这些文档都是关于链接容器、公开端口和使用环境/主机名的。对我来说,情况正好相反:“为什么我能够ping另一个容器而不链接它?”这也是一个设计问题:使用
      --icc=false
      可以强制封装。什么集装箱都有。@luebken是的,公平点。我已经稍微改写了我的答案。EXPOSE实际上只是一点元数据。当我意识到它所起的作用是如此之小时,我有点惊讶。@luebken只是补充了一点链接的限制。我怀疑这更重要;链接是一个很好的特性,但并不涵盖所有用例。而在过去,它们更脆弱,尤其是当容器重新启动时。