Docker-机器群;如何在虚拟机上打开端口

Docker-machine swarm; how to open ports on VM

正在尝试新的 "swarm mode",继 this 之后。我已经通过 docker-machine create --driver virtual box <name> 创建了 3 个虚拟机。但是我如何打开它们的端口?

它可能与在节点上执行的 docker run -p <public-port>:<internal-port> <image> 一起工作。然而,既然你想 运行 一群,我想最好遵循 solve the routing mess here 的一个很好的指南。如果您按照作者的建议,您需要先通过 docker-machine 命令创建一个 swarm(即 docker 主机集群),例如

docker-machine create --driver virtualbox swarm-1
docker-machine create --driver virtualbox swarm-2

设置群

eval $(docker-machine env swarm-1)
docker swarm init --advertise-addr $(docker-machine ip swarm-1)

加入其他机器(如果有的话)

eval $(docker-machine env swarm-2)
docker swarm join \ 
--token <yourtoken> 192.168.99.106:2377

docker swarm init 命令的输出中找到 <yourtoken>

然后作者建议创建一个类似

的网络
docker network create --driver overlay webnet

并通过定义类似

的服务来发布端口
docker service create --name webapp --replicas=2 --network webnet --publish 80:8000 <yourdockerimage>

在本例中,您的docker映像在内部 运行8000 端口上运行一个服务,该服务映射到 docker 主机的 80 端口。然后,您可以访问服务,例如通过

curl http://<IP-address of any Docker swarm node>:80

请注意,您可以访问任何 Docker swarm 节点的 IP 地址。 Docker swarm 会施展魔法并将请求路由到此服务的容器,即使您选择了节点的 IP 地址,但 运行 没有此服务的容器。