Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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
Networking 如何设置通讯受限的Docker网络?_Networking_Docker_Containers - Fatal编程技术网

Networking 如何设置通讯受限的Docker网络?

Networking 如何设置通讯受限的Docker网络?,networking,docker,containers,Networking,Docker,Containers,我正在尝试创建如下内容: 每个服务器容器都公开了8080端口,并接受来自客户机的请求,但至关重要的是,它们不允许相互通信 这里的问题是服务器容器是在客户端容器之后启动的,所以我不能像以前那样将容器链接标志传递给客户端,因为它应该链接到的容器还不存在 我一直在研究更新的Docker网络技术,但我不能使用桥接器,因为我不希望服务器间的交叉通信成为可能。在我看来,每个服务器一个网桥的扩展性不好,在客户端容器中很难管理 是否有某种类似docker结构的开关可以做到这一点?希望这与您的用例相关-我试图从

我正在尝试创建如下内容:

每个服务器容器都公开了8080端口,并接受来自客户机的请求,但至关重要的是,它们不允许相互通信

这里的问题是服务器容器是在客户端容器之后启动的,所以我不能像以前那样将容器链接标志传递给客户端,因为它应该链接到的容器还不存在

我一直在研究更新的Docker网络技术,但我不能使用桥接器,因为我不希望服务器间的交叉通信成为可能。在我看来,每个服务器一个网桥的扩展性不好,在客户端容器中很难管理


是否有某种类似docker结构的开关可以做到这一点?

希望这与您的用例相关-我试图从图表和注释中勾勒出您实际应用程序的上下文。我建议您选择服务发现路线。它可能需要在中央存储(比如Redis或SkyDNS)上使用一点简单的API,但从长远来看会使事情变得简单

例如,Kubernetes使用SkyDNS来实现DNS。在一天结束时,您选择的任何编排工具都很可能会执行以下开箱即用的操作:

想法很简单:

  • 使用保留新生成的服务器条目的DNS容器
  • 允许客户端容器查询服务器列表。e、 g.用一堆
    服务器-
    来描绘DNS响应
  • 禁止客户端容器对此DNS的读取访问(如何在不进行间接寻址的情况下管理此权限配置,即不通过允许写入DNS容器但不允许读取的端点代理,将讨论此问题)

额外编辑:我刚刚意识到,您可以使用更简单的Redis设置来完成此操作,而DNS可能过于工程化:)

似乎您需要创建多个网桥网络,每个容器一个。为了简化这一过程,您可能需要使用
docker compose
来指定网络和容器的配置方式,并使用
docker compose
工具将其正确连接起来

资源:


另一个旁注:我认为所有网络都可以访问暴露的端口。如果这是正确的,您可以将所有服务器网络设置为“无”,并依靠暴露的端口连接服务器。

您能再解释一下为什么不能使用link吗?此外,您能否提供一些示例,例如docker compose文件或用于编排所有容器的任何其他脚本?我无法使用链接,因为服务器是在客户端之后启动的,因此我无法将客户端链接到尚不存在的服务器,因为链接信息是在启动时传递的,并且您无法追溯链接(相关:)。如果是一台服务器和多个客户端,我可以将链接信息传递给客户端,但我希望相反。我使用DockerRode通过Docker远程API与Docker接口,但启动容器命令行和使用标志也是如此。现在我只是使用一个网络,但它并不理想,因为我不希望连接到该网络的服务器能够相互通信。我正在研究iptables规则。我不明白为什么需要在服务器之前“启动”客户端容器。但无论如何,您可以先创建容器,并在服务器可用后启动它们。请注意,
docker run
命令是一系列
docker create
docker start
命令。这是如何防止服务器之间通信的?我想你不会通过DNS容器代理所有流量吧?为什么服务器不能自己扫描其他服务器?