我想在一台服务器上拥有多个 Docker 容器,并让它们都托管 Web 应用程序。如果我只设置了一个 Docker 容器,我可以在 Docker 容器上公开端口 80,并通过物理服务器的公共 IP 地址连接到 Docker 容器。但是,我希望两个 Docker 容器都在物理服务器的端口 80 上运行,并且可以通过与物理 Docker 服务器位于同一网络上的服务器的不同 IP 地址访问。这可能吗?如果可以,我该如何实现?我一直在做一些研究,但还没有找到办法,所以任何建议都值得感激。
答案1
您不能让两台设备共享同一个 IP 地址,否则会导致连接和流量问题。在较低层,网络硬件使用 MAC 地址(每个设备都应该是唯一的)来决定将与给定连接相关的流量发送到何处。将另一台设备放在 LAN 上,如果 IP 地址已被使用,则会导致数据包随机传送到每个设备。一台主机可能正在等待已建立连接的 ACK 数据包,但它永远不会收到它,因为它已转到另一台主机。
如果你想要一个“备用”docker 镜像,当“热”镜像宕机时,该镜像会自动开始提供内容,请查看HAProxy。如果您希望在两个容器之间分发请求,请查看路由域名系统。这些是让多个主机同时在线的一些最便宜/最简单的方法。
这两种选择都涉及与“负载平衡”或“容错”有关的技术。还有其他选择,但取决于你想投入多少时间、金钱和精力。