【问题标题】:Unable to reach web server in Docker swarm from the host无法从主机访问 Docker swarm 中的 Web 服务器
【发布时间】:2018-11-19 14:04:49
【问题描述】:

我开始在 macOS 上使用 Docker,但在尝试完成 part 4 of the Get Started guide 时卡住了。我创建了两个额外的虚拟机(myvm1myvm2),将myvm1 设置为swarm manager,将myvm2 设置为worker。 然后,我使用教程第 3 部分中的 docker-compose.yml 部署了一个包含 5 个 Flask Web 服务器的堆栈。这些进程似乎开始正常,并且分布在两台机器之间,但我无法使用浏览器从主机访问它们。

我应该如何配置端口转发/网络以便能够从运行 docker 容器的虚拟机主机访问集群中的 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

docker-compose.yml:

version: "3"
services:
  web:
    image: mochr/test_repo:friendly_hello
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "4000:80"
    networks:
      - webnet
networks:
  webnet:

【问题讨论】:

    标签: macos docker docker-swarm docker-networking


    【解决方案1】:

    这似乎是当前版本的 boot2docker 的一个已知问题:https://github.com/docker/machine/issues/4608

    解决方法是使用基于不需要 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 create myvm1

    然后,您应该能够在 192.168.99.100:4000 或 192.168.99.101:4000(或 docker-machine ls 显示的任何 IP 地址)启动您的堆栈并访问您的容器

    【讨论】:

    • 谢谢!使用 18.06.1 版的 boot2docker 解决了这个问题。看起来该错误已在 this 合并中修复,并且它应该可以在没有版本 18.09.1 的解决方法的情况下工作。
    猜你喜欢
    • 2016-07-18
    • 1970-01-01
    • 2018-09-08
    • 2021-02-11
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2019-09-08
    • 1970-01-01
    相关资源
    最近更新 更多