Docker容器之间通过UNIX套接字的连接

10
我是一名 Docker 新手,但我想知道:在 Linux 机器(任何)上,是否可以使用 UNIX 套接字从一个容器连接到另一个容器?
例如,我有一个应用程序核心容器和一个涵盖数据库事务的第二个容器。
另一个例子是两个包含应用程序代码的容器,第一个容器可以触发第二个容器中的某些事件。
在这两种情况下,性能真的很重要。
如果不可能以这种方式做到这一点,是否有任何解决方案可以解决这些问题?
谢谢!
1个回答

13

可以。您可以使用卷挂载将套接字挂载到容器中。多个容器可以挂载相同的卷,无论是命名卷还是主机挂载,以在容器之间共享套接字。您经常会看到今天挂载docker套接字的容器使用此功能,例如:

docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock busybox

将使用挂载docker套接字的方式运行容器。


关于docker.sock本身的注意事项:

  1. 以上是一个挂载套接字的例子,将docker.sock替换为你自己应用程序的套接字名称。
  2. 是的,上述操作让容器可以管理docker,实际上是在主机上具有root权限。您可以使用打包为容器的工具来管理docker。您需要隐式地相信它们可以访问服务器并具有root权限,这与信任通过apt或rpm在主机上下载的代码类似。要谨慎选择授予此访问权的内容。

1
在容器内不挂载docker.sock是否是一个重大的安全问题? - Greg0ry
@Greg0ry 取决于容器中运行的内容。如果是需要访问 Docker 的容器,则您必须隐式地信任该容器,就像您对具有访问套接字权限的容器外任何内容一样。 - BMitch
我是docker的新手,刚开始将我的系统迁移到docker容器中。我不相信在我的容器中运行的任何东西,即使那是“我的”东西……我喜欢这个关于docker的视频,也许你也会喜欢:https://www.youtube.com/watch?v=uQigvjSXMLw - Greg0ry
@Greg0ry 需要使用套接字的工具包括像rancher、ucp、可以进行动态重新配置的反向代理(traefik、nginx-proxy)之类的工具。这取决于您是否管理和发送用于管理Docker容器的工具。 - BMitch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接