Я следую руководству по докеру, и я нахожусь на часть 4: рои , которая включает в себя настройку роя между двумя виртуальными машинами.Я думаю, что рой неправильно отображает порты моего контейнера.Когда я запускаю приложение с роем, я не могу подключиться к своему приложению, когда пытаюсь посетить IP-адрес, предоставленный моей виртуальной машиной.Однако, если я вручную запускаю приложение, когда SSH-соединение с виртуальной машиной, я могу получить к нему доступ.
Причина, по которой я считаю, что Swarm неправильно отображает порты, заключается в том, что когда я развернул приложение через Swarm, я попытался просмотреть сопоставления портов контейнера, выполнив что-то вроде docker port CONTAINER_NAME
, и ничего не отобразилось.После развертывания вручную и запуска этой команды для указанного контейнера я вижу что-то вроде 80 / tcp -> 0.0.0.0:80
Например, вот что происходит, когда я пытаюсь использовать curl
curl 192.168.99.100:80
curl: (7) Failed to connect to 192.168.99.100 port 80: Connection refused
Я сделал этот пост некоторое время назад, в котором более подробно, но это осталось без ответа, и я думаю, что новая информация, которую я имею, может быть более полезной.
Что нене работает
Когда я пытаюсь развернуть w / swarm docker stack deploy -c docker-compose.yml getstartedlab
, я не могу подключиться к приложению через веб-браузер или curl.Я считаю, что все было развернуто правильно, потому что я могу запустить docker stack ps getstartedlab
и просмотреть все службы, работающие и распределенные между двумя моими виртуальными машинами.
Что работает
Я взялвниз по стеку с помощью docker stack rm getstartedlab
, затем я ssh'd в два виртуальных компьютера, которые я создал, и вручную запустил приложение, указав сопоставление портов следующим образом:
docker run -p 80:80 -td myusername/get-started:part2
Затем перейдя к 192.168.99.100
, я смог увидетьприложение и больше не было проблем с подключением.Я почти уверен, что это означает, что это проблема Docker, а не проблема виртуальной машины.
Другая информация - может быть полезна
Вот мой файл docker-compose.yml.Я пробовал порты с "4000: 80" и "80:80"
version: "3"
services:
web:
image: myusername/get-started:part2
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "4000:80"
networks:
- webnet
networks:
webnet:
Подводя итог, я не могу получить доступ к приложению, когда пытаюсь запустить его с помощью роя.Если я запускаю вручную из виртуальной машины и указываю сопоставление портов (без использования роя), я могу получить доступ к приложению с IP-адреса виртуальной машины.
Обновления
Я удалил работающий стек, перезапустил виртуальные машины и перезапустился с docker stack deploy -c docker-compose.yml getstartedlab
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
4kn46vue9ka3 getstartedlab_web replicated 5/5 myusername/get-started:part2 *:4000->80/tcp
$ docker service ps 4kn46vue9ka3
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
a34u4jijc5d6 getstartedlab_web.1 myusername/get-started:part2 myvm1 Running Running 20 minutes ago
8fvukpo95ko4 getstartedlab_web.2 myusername/get-started:part2 myvm2 Running Running 20 minutes ago
lywca2zwtjfa getstartedlab_web.3 myusername/get-started:part2 myvm2 Running Running 20 minutes ago
u3cw40tjmujb getstartedlab_web.4 myusername/get-started:part2 myvm1 Running Running 20 minutes ago
c0tiyxu5o5x5 getstartedlab_web.5 myusername/get-started:part2 myvm2 Running Running 20 minutes ago
Вот журналы
$ docker service logs 4kn46vue9ka3
getstartedlab_web.4.u3cw40tjmujb@myvm1 | * Serving Flask app "app" (lazy loading)
getstartedlab_web.4.u3cw40tjmujb@myvm1 | * Environment: production
getstartedlab_web.4.u3cw40tjmujb@myvm1 | WARNING: Do not use the development server in a production environment.
getstartedlab_web.4.u3cw40tjmujb@myvm1 | Use a production WSGI server instead.
getstartedlab_web.4.u3cw40tjmujb@myvm1 | * Debug mode: off
getstartedlab_web.4.u3cw40tjmujb@myvm1 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
getstartedlab_web.1.a34u4jijc5d6@myvm1 | * Serving Flask app "app" (lazy loading)
getstartedlab_web.1.a34u4jijc5d6@myvm1 | * Environment: production
getstartedlab_web.1.a34u4jijc5d6@myvm1 | WARNING: Do not use the development server in a production environment.
getstartedlab_web.1.a34u4jijc5d6@myvm1 | Use a production WSGI server instead.
getstartedlab_web.1.a34u4jijc5d6@myvm1 | * Debug mode: off
getstartedlab_web.1.a34u4jijc5d6@myvm1 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
getstartedlab_web.3.lywca2zwtjfa@myvm2 | * Serving Flask app "app" (lazy loading)
getstartedlab_web.3.lywca2zwtjfa@myvm2 | * Environment: production
getstartedlab_web.3.lywca2zwtjfa@myvm2 | WARNING: Do not use the development server in a production environment.
getstartedlab_web.3.lywca2zwtjfa@myvm2 | Use a production WSGI server instead.
getstartedlab_web.3.lywca2zwtjfa@myvm2 | * Debug mode: off
getstartedlab_web.3.lywca2zwtjfa@myvm2 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
getstartedlab_web.2.8fvukpo95ko4@myvm2 | * Serving Flask app "app" (lazy loading)
getstartedlab_web.2.8fvukpo95ko4@myvm2 | * Environment: production
getstartedlab_web.2.8fvukpo95ko4@myvm2 | WARNING: Do not use the development server in a production environment.
getstartedlab_web.2.8fvukpo95ko4@myvm2 | Use a production WSGI server instead.
getstartedlab_web.2.8fvukpo95ko4@myvm2 | * Debug mode: off
getstartedlab_web.2.8fvukpo95ko4@myvm2 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
getstartedlab_web.5.c0tiyxu5o5x5@myvm2 | * Serving Flask app "app" (lazy loading)
getstartedlab_web.5.c0tiyxu5o5x5@myvm2 | * Environment: production
getstartedlab_web.5.c0tiyxu5o5x5@myvm2 | WARNING: Do not use the development server in a production environment.
getstartedlab_web.5.c0tiyxu5o5x5@myvm2 | Use a production WSGI server instead.
getstartedlab_web.5.c0tiyxu5o5x5@myvm2 | * Debug mode: off
getstartedlab_web.5.c0tiyxu5o5x5@myvm2 | * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
Я запустил это как с локального компьютера, так и с виртуальной машины, результаты были одинаковыми
$ docker container exec getstartedlab_web.1.a34u4jijc5d69m7rqry1jpfo9 curl http://127.0.0.1
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"curl\": executable file not found in $PATH": unknown
Я также запустил рой только с одним узлом, но мне все равно не удалось подключиться к 192.168.99.100 /
$ docker-machine ssh myvm2
docker@myvm2:~$ docker swarm leave
Затем снова на моей локальной машине
$ docker-machine stop myvm2
$ docker stack deploy -c docker-compose.yml getstartedlab
$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
gjkde7aw2rznl9y68zti3lqrj * myvm1 Ready Active Leader 18.09.0
qu6qymppl1msxatll9m0sh7tn myvm2 Down Active 18.09.0
$ docker stack ps getstartedlab
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
vr0w3riw1cnz getstartedlab_web.1 myusername/get-started:part2 myvm1 Running Running 22 seconds ago
pvr93rqi64dw getstartedlab_web.2 myusername/get-started:part2 myvm1 Running Running 22 seconds ago
gucfa7asiwvx getstartedlab_web.3 myusername/get-started:part2 myvm1 Running Running 22 seconds ago
qzarr6jc5hzk getstartedlab_web.4 myusername/get-started:part2 myvm1 Running Running 22 seconds ago
p0hszupsl8wj getstartedlab_web.5 myusername/get-started:part2 myvm1 Running Running 22 seconds ago
Я также проверил журналы, и нигде не было никаких признаков myvm2, как и ожидалось.
Больше обновлений
Я удалил все изображения, контейнеры, виртуальные машины и т. Д. И запустил руководство с самого начала.Чтобы убедиться, что старый код / конфигурации не использовались, я назвал vm myvm3, и теперь образ снова запускается.На этот раз я запустил только один VM как кластер с одним узлом.Все еще не повезло, у меня та же ошибка "отказано в соединении"
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm3 * virtualbox Running tcp://192.168.99.102:2376 v18.09.0
$ docker stack ps getstartedlab
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
hnbqdo9k3val getstartedlab_web.1 myusername/get-started-again:part2 myvm3 Running Running 7 minutes ago
bwc0ga954poo getstartedlab_web.2 myusername/get-started-again:part2 myvm3 Running Running 7 minutes ago
aleioewe4ivx getstartedlab_web.3 myusername/get-started-again:part2 myvm3 Running Running 7 minutes ago
fzys3tihrf0t getstartedlab_web.4 myusername/get-started-again:part2 myvm3 Running Running 7 minutes ago
4jyzzao11z96 getstartedlab_web.5 myusername/get-started-again:part2 myvm3 Running Running 7 minutes ago