首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何显式允许任意两个容器通信,默认情况下是不允许的

如何显式允许任意两个容器通信,默认情况下是不允许的
EN

Server Fault用户
提问于 2018-02-04 12:28:15
回答 1查看 451关注 0票数 1

使用新的码头自定义网络,如果您想默认不允许容器间通信,并显式定义任何可以通信的容器,则需要创建最多2^N网络(其中N=容器数),并将确切的两个容器附加到每个网络上。这样做有什么缺点吗?

此外,如果我只想允许从webServerContainerdbContainer的出站连接,而不允许从dbContainerwebServerContainer的出站连接,那么有什么方法可以做到吗?

似乎使用icc=false和遗留的--link特性允许这样的功能,但是这个特性被标记为不推荐使用。

例如:

  • 我有一个数据库容器
  • 我有N个需要读写数据库的无状态容器
  • 我希望允许每个N个无状态容器与数据库容器对话,但防止N个无状态容器之间的任何一对连接
  • 如果我把所有的N+1容器放在同一个用户定义的database-access网络中,它们中的任何一对都可以相互交谈,这不是我想要的。
  • 此外,理想情况下,我希望我的N个无状态容器能够启动到我的数据库容器的连接,但我不希望我的数据库容器能够以另一种方式启动连接。

有没有人对实现这一目标的最佳方式有建议,比如17.12码头?

EN

回答 1

Server Fault用户

发布于 2018-02-04 14:20:51

我的回答可能不是最矫揉造作的方式,但仍然有帮助,我希望。

我最喜欢的方法是手工操作。Docker操纵iptables来实现访问规则和容器间通信。我个人不喜欢这样做(原因有几个;iptable的状态通常会变得一团糟,尤其是其他软件也会操纵iptables )。因此,我将"iptables": false/etc/docker/daemon.json中设置为false:

代码语言:javascript
运行
复制
# cat daemon.json 
{
  "iptables": false
}

就像你在网络之间路由时一样配置网络。

这也意味着您需要设置端口转发(或HTTP代理等)来从外部访问容器,并且您必须定义自己的码头网络(docker network)。

我的回答这里也可能有帮助。

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/895586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档