我使用 docker-machine 创建了 3 个虚拟机:
docker-machine create -d virtualbox manager1
docker-machine create -d virtualbox worker1
docker-machine create -d virtualbox worker2
这些是他们的IP:
docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
manager - virtualbox Running tcp://192.168.99.102:2376 v1.12.6
worker1 - virtualbox Running tcp://192.168.99.100:2376 v1.13.0-rc5
worker2 - virtualbox Running tcp://192.168.99.101:2376 v1.13.0-rc5
然后docker-machine ssh manager1
和:
docker swarm init --advertise-addr 192.168.99.102:2377
然后worker1和worker2加入swarm。
现在我创建了一个覆盖网络:
docker network create -d overlay skynet
并以全局模式部署服务(节点的 1 个任务):
docker service create --name http --network skynet --mode global -p 8200:80 katacoda/docker-http-server
并且节点有效地有 1 个容器(任务)。
现在,我想直接访问我的虚拟主机.. 或者,至少,我想直接浏览我的服务的容器,因为我想用 nginx 开发我的服务的负载均衡器。为此,在我的 nginx conf 文件中,我想指向一个特定的服务容器(即现在我在全局模式下有 3 个节点(1 个管理器和 2 个工作人员),所以我有 3 个任务正在运行-->i'我想从这 3 个容器中选择一个)。我怎样才能做到这一点?
[编辑]:我可以简单地浏览到我的群节点VM_IP:SERVICE_PORT
,即:192.168.99.102:8200
,但仍然存在内部负载平衡。
我在想,如果我指向一个特定的 swarm 节点,我将在该特定节点内使用容器。但暂时没有。