【问题标题】:Sharing Linux socket between Docker containers在 Docker 容器之间共享 Linux 套接字
【发布时间】:2022-07-18 21:14:51
【问题描述】:

我有两个 Docker 容器——redis(运行 Redis 数据库)和node(运行 Node.js 应用程序)。我的 Node.js 应用程序需要与 Redis 数据库进行通信,但我不确定应该如何安排。以下是我目前想到的一些方法:

  1. 将两个容器放在一个网络上,暴露(但不发布)redis容器的端口6379(或Redis服务器正在监听的任何地方),并从node容器连接到暴露的端口。
  2. 让 Redis 服务器监听一个 UNIX 套接字,该套接字安装到主机上的某个位置(即,在 redis 容器之外),该套接字也安装到 node 容器中(这甚至可以工作吗?)。
  3. 完全抛弃单独容器的想法,将 Redis 服务器和 Node 应用程序放在同一个容器中(我真的不想这样做)。

哪个选项最好,或者您还有什么建议?我想最大限度地提高性能安全性,但我还需要使用容器。

附注那里有一些与此类似的问题,但似乎没有一个能回答我的问题。话虽如此,如果您找到可能有帮助的现有答案,请链接到它。

【问题讨论】:

  • 通过 TCP 使用 Docker 网络(选项 1)。 “暴露”在现代 Docker 中几乎没有任何意义,你可以忽略这个子步骤。几乎所有official Docker sample applications 都以这种方式工作,并且避免了共享文件方面的大量复杂情况。

标签: docker sockets unix unix-socket


【解决方案1】:

大概,第二种方法具有更高的性能。有一些比较herehere

为了实现这种方法,您可以简单地创建一个 docker 卷并将其挂载到两个容器中。例如你可以基于redis 镜像创建一个 Dockerfile 并将这样的配置放在它的/etc/redis.conf 中:

unixsocket /run/redis-socket/redis.sock
unixsocketperm 777 
port 0

然后挂载一个docker卷到redis容器的/run/redis-socket/。不要忘记将该卷挂载到节点容器中的任意路径。

【讨论】:

    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    相关资源
    最近更新 更多