Macos 无法从主机访问Docker swarm中的web服务器

Macos 无法从主机访问Docker swarm中的web服务器,macos,docker,docker-swarm,docker-networking,Macos,Docker,Docker Swarm,Docker Networking,我开始在macOS上使用Docker,但在尝试完成时遇到了问题。我创建了两个额外的虚拟机(myvm1和myvm2),将myvm1设置为swarm manager,将myvm2设置为worker。 然后,我使用本教程第3部分中的docker compose.yml部署了一个包含5个Flask web服务器的堆栈。这些进程似乎启动得很好,分布在两台机器之间,但我无法使用浏览器从主机访问它们 我应该如何配置端口转发/网络,以便能够从运行docker容器的虚拟机主机访问swarm中的web服务器 下面是

我开始在macOS上使用Docker,但在尝试完成时遇到了问题。我创建了两个额外的虚拟机(
myvm1
myvm2
),将
myvm1
设置为swarm manager,将
myvm2
设置为worker。 然后,我使用本教程第3部分中的
docker compose.yml
部署了一个包含5个Flask web服务器的堆栈。这些进程似乎启动得很好,分布在两台机器之间,但我无法使用浏览器从主机访问它们

我应该如何配置端口转发/网络,以便能够从运行docker容器的虚拟机主机访问swarm中的web服务器

下面是我运行过的命令列表,其中一些命令具有结果输出

$ docker-machine create --driver virtualbox myvm1
$ docker-machine create --driver virtualbox myvm2

$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.0
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.09.0

$ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100"
$ docker-machine ssh myvm2 "docker swarm join --token <my-token-inserted-here> 192.168.99.100:2377"

$ eval $(docker-machine env myvm1)
$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.0
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.09.0

$ docker stack deploy -c docker-compose.yml getstartedlab

$ docker stack ps getstartedlab
ID                  NAME                  IMAGE                            NODE                DESIRED STATE       CURRENT STATE              ERROR               PORTS
it9asz4zpdmi        getstartedlab_web.1   mochr/test_repo:friendly_hello   myvm2               Running             Preparing 18 seconds ago
645gvtnde7zz        getstartedlab_web.2   mochr/test_repo:friendly_hello   myvm1               Running             Preparing 18 seconds ago
fpq6cvcf3e0e        getstartedlab_web.3   mochr/test_repo:friendly_hello   myvm2               Running             Preparing 18 seconds ago
plkpximnpobf        getstartedlab_web.4   mochr/test_repo:friendly_hello   myvm1               Running             Preparing 18 seconds ago
gr2p8a0asatb        getstartedlab_web.5   mochr/test_repo:friendly_hello   myvm2               Running             Preparing 18 seconds ago

这似乎是boot2docker当前版本的已知问题:

解决方法是使用基于不需要boot2docker的机器(例如AWS、DigitalOcean等)的swarm,等待更新版本的boot2docker发布,或者使用早期版本的boot2docker,如该链接中所述。要使用早期版本,请执行以下操作:

export VIRTUALBOX_BOOT2DOCKER_URL=https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso
在使用docker machine创建虚拟机之前。(首先删除现有虚拟机,然后使用该导出,然后
docker machine创建myvm1


然后,您应该能够打开堆栈并访问位于192.168.99.100:4000或192.168.99.101:4000(或docker machine ls显示的任何IP地址)的容器。

谢谢!使用boot2docker的18.06.1版解决了这个问题。看起来这个bug已经在merge中修复了,它应该可以在没有版本18.09.1的解决方法的情况下工作。
export VIRTUALBOX_BOOT2DOCKER_URL=https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso