不同服务器上 docker 个容器之间的通信

Communication between docker containers on different servers

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

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

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

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

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

作为一个更普遍的问题,如果给定的客户端和服务器位于不同的主机上,即使两者都在 Docker 中,Docker 本身也不会提供太多具体的帮助。您可以将事物配置为仅使用物理主机名,忽略 Docker space,并在移动工作负载时重新部署;您可以部署像 Consul that knows where services are running and can tell the clients; or set up an overlay network 这样的服务注册表(也可以购买 Docker 的 Swarm 容器编排器)。这也与您部署工作负载的方式有关,如果您使用的是 Ansible,或者可以容忍安装一个全面的集群管理器,或者坚持只使用 docker run 或 [=13,那么您在这里的选择可能会有所不同=] 命令。