连接不同服务器上的多个容器跨网络进行通信是
docker swarm的一个完美使用案例。您应该尝试创建一个overlay网络,并将正在运行的容器连接到swarm和该网络,如
此处所述。根据您对swarm生态系统的了解,可以尝试不同的解决方案。
从Docker 1.12开始,如果您想手动管理容器,则可以运行以下命令:
$ docker pull swarm
$ docker swarm init --advertise-addr $(hostname -I | awk '{print $1}')
$ docker network create --driver overlay redisnet
这个命令会输出一个从节点命令,用于在您的节点上加入Swarm作为“从节点”服务器。如果您想要从该服务器启动服务,您应该输出以下命令,它将给您提供管理令牌。
$ docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join \
--token SWMTKN-1-1ewyz5urm5ofu78vddmrixfaye5mx0cnuj0hwxdt7baywmppav-0p5n6b7hz170gb79uuvd2ipoy \
<IP_ADDRESS>:2377
当您的节点在Swarm上时,您可以使用副本启动redis服务。
$ docker service create --network redisnet \
--name redis --replicas 1 redis:3.0.1
$ docker service create --network redisnet \
--name old_redis --replicas 1 redis:2.8.20
$ docker service create --network redisnet --name app <APP_IMAGE>
现在你所有的容器都可以使用服务名称作为特定服务的主机名进行http调用。基本上,如果你只需要从应用程序访问redis服务,那么这样做就足够了。
你也可以使用相同的docker选项-p
暴露端口,但你必须发现哪个服务器运行你的服务。然而,这要求你遵循其他答案检查你的VM上是否有任何端口阻塞。
此外,还有其他解决方案,如Kubernetes或Mesos,但swarm是官方推荐的方法。
IPOFDOCKERINSTALLEDMACHINE
的位置使用的值是什么?是您的本地主机吗? - Rao