13

下面是背景故事,但问题是:我发现如果我的 docker 主机上运行了 postgresql,我可以通过作为文件安装的域套接字在容器中连接到它:

docker run -v /var/run/postgresql/:/var/run/postgresql

这感觉像是一次重大的黑客攻击,所以我很好奇这在生产环境中是否真的很可怕。想法?


背景故事

背景是我在 docker 主机上运行了 postgresql,因为我不相信 docker 可以直接运行 postgresql。

所以我需要从在同一台服务器上运行的 docker 容器连接到该 postgresql 实例。我试过了:

  • 使用--add-host

    但这也是一个 hack,因为它需要将 docker run 放入脚本中以找出主机的正确 IP。就像是:

     docker run --add-host=postgres-host:$(ip route show | awk {print $2})
    

    我不喜欢这样做。

  • 我尝试使用--net=host,但是……那不是我们想要的。我们想要一个覆盖网络。

  • 我尝试通过在容器中查找主机的 IP 地址来设置它,但我觉得为此目的运行脚本并不好。

所以......我想:“使用域套接字怎么样?”

4

2 回答 2

6

安装插座对我来说听起来不像是黑客攻击。事实上,/var/run/docker.sock如果你想在容器内使用 docker 命令,挂载是标准的方法。

于 2019-05-07T06:20:11.683 回答
2

我想的是security& scalability

  • 安全

    使用docker,即使容器被黑客攻击,您仍然可以在容器(Web服务器)和主机(数据库服务器)之间进行保护,但是使用unix socket,我猜数据会直接暴露给黑客。

  • 可扩展性

    我们需要将 Web 服务器和数据库服务器分开的原因之一是:如果遇到性能问题,我们可以轻松扩展 Web 服务器,将更多 Web 服务器连接到一台数据库服务器,应用程序可以支持更多人访问。

    但是unix-socket,由于 docker 中的 Web 服务器不可扩展,您必须将 Web 服务器(容器)放在一台机器上才能使用unix-socketdb。

于 2019-05-07T06:56:21.283 回答