Невозможно связаться с веб-сервером в Docker Swarm с хоста - PullRequest
0 голосов
/ 18 ноября 2018

Я начинаю использовать Docker в macOS и застреваю при попытке выполнить часть 4 руководства по началу работы . Я создал две дополнительные виртуальные машины (myvm1 и myvm2), установил myvm1 в качестве менеджера роя и myvm2 в качестве рабочего. Затем я развернул стек с 5 веб-серверами Flask, используя docker-compose.yml из третьей части руководства. Кажется, что процессы запускаются нормально и распределяются между двумя машинами, но я не могу связаться с ними с хоста с помощью браузера.

Как мне настроить переадресацию портов / сеть, чтобы они могли подключаться к веб-серверам в рое с хоста виртуальных машин, на которых работает докер-контейнер?

Ниже приведен список команд, которые я выполнил, некоторые с полученным результатом.

$ 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:

1 Ответ

0 голосов
/ 19 ноября 2018

Похоже, что это известная проблема с текущей версией boot2docker: https://github.com/docker/machine/issues/4608

Обходной путь - либо использовать рой на основе компьютеров, для которых не требуется boot2docker (например, AWS, DigitalOcean и т. Д.), Дождаться выпуска более новой версии boot2docker или использовать более раннюю версию boot2docker, как описано в эта ссылка. Чтобы использовать более раннюю версию:

export VIRTUALBOX_BOOT2DOCKER_URL=https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso

перед созданием виртуальных машин с помощью Docker-машины. (Сначала удалите существующие виртуальные машины, затем используйте этот экспорт, затем docker-machine create myvm1)

Тогда вы сможете открыть свой стек и получить доступ к контейнерам по адресу 192.168.99.100:4000 или 192.168.99.101:4000 (или по любым IP-адресам, обнаруженным док-машиной ls)

...