【问题标题】:Communication between docker containers on different servers不同服务器上的 docker 容器之间的通信
【发布时间】:2019-01-09 04:59:49
【问题描述】:

我有一台服务器与 nginx 一起运行一个网站,它们位于它们自己的 docker 容器中。我有一个完全独立的服务器在容器内运行 postgres。

我将如何在两台服务器之间进行通信,以便第一台服务器上的网站可以使用第二台服务器上的数据库?

这在本地运行良好,因为我可以使用 docker compose 并在同一个 docker 网络上启动所有内容。或者,我也可以单独启动容器并指定一个外部网络供它们使用,它再次运行良好。但是我不确定如何在不同的服务器(vps)上让这一切在生产中正常工作。

我知道像 Kubernetes 这样的东西,我认为它可以帮助解决这个问题,但我没有这方面的经验,我宁愿避免这种情况,同时保持这一切尽可能简单/普通。这仅适用于个人项目,我的技能在于开发,而不是 devops。

【问题讨论】:

    标签: docker vps


    【解决方案1】:

    您设置容器的方式与数据库在远程主机上运行但不是在 Docker 中运行的方式完全相同:使用其他主机的名称作为数据库主机和适当的数据库名称、登录凭据配置它们, &C。您需要确保将数据库容器配置为允许外部连接(docker run -p 3306:3306-p 5432:5432 选项视情况而定);它不一定在单主机 Docker Compose 设置中。

    作为一个更一般的问题,如果给定的客户端和服务器位于不同的主机上,即使两者都在 Docker 中,Docker 本身也不会提供太多具体的帮助。您可以将事物配置为仅使用物理主机名,忽略 Docker 空间,并在移动工作负载时重新部署;您可以部署像Consul 这样的服务注册表,它知道服务在哪里运行并可以告诉客户端;或set up an overlay network(也购买了 Docker 的 Swarm 容器编排器)。这也与您部署工作负载的方式有关,如果您使用 Ansible,或者可以容忍安装完整的集群管理器,或者坚持只使用 docker rundocker-compose 命令,您在此处的选择可能会有所不同。

    【讨论】:

    • 感谢您的回答。通常我使用 docker 和 compose 进行我所有的本地开发。然后在部署到生产环境时,我使用 ansible 将所有内容直接安装在多台服务器上(即:没有 docker)。这一直运作良好,我只是认为在生产服务器上也有 docker 可能会有一些好处,以便开发和生产环境更加相似。我开始怀疑这是否不值得。
    猜你喜欢
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多