我现在正在学习使用docker跟随get-started documents,但在第4部分 - Swarms我遇到了一些问题。那就是在群集上部署我的应用程序时,我无法成功访问它。
docker@myvm1:~$ docker stack ps getstartedlab
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
gsueb9ejeur5 getstartedlab_web.1 zhugw/get-started:first myvm1 Running Preparing 11 seconds ago
ku13wfrjp9wt getstartedlab_web.2 zhugw/get-started:first myvm2 Running Preparing 11 seconds ago
vzof1ybvavj3 getstartedlab_web.3 zhugw/get-started:first myvm1 Running Preparing 11 seconds ago
lkr6rqtqbe6n getstartedlab_web.4 zhugw/get-started:first myvm2 Running Preparing 11 seconds ago
cpg91o8lmslo getstartedlab_web.5 zhugw/get-started:first myvm2 Running Preparing 11 seconds ago
docker@myvm1:~$ curl 'http://localhost'
curl: (7) Failed to connect to localhost port 80: Connection refused
➜ ~ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 - virtualbox Running tcp://192.168.99.101:2376 v17.06.0-ce
myvm2 - virtualbox Running tcp://192.168.99.100:2376 v17.06.0-ce
➜ ~ curl 'http://192.168.99.101'
curl: (7) Failed to connect to 192.168.99.101 port 80: Connection refused
出了什么问题?
另外,很奇怪。在docker-compose.yml
中添加以下内容后,我发现上述问题已自动解决
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
但这次新添加的visualizer
不起作用
docker@myvm1:~$ docker stack ps getstartedlab
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
xomsv2l5nc8x getstartedlab_web.1 zhugw/get-started:first myvm1 Running Running 7 minutes ago
ncp0rljod4rc getstartedlab_visualizer.1 dockersamples/visualizer:stable myvm1 Running Preparing 7 minutes ago
hxddan48i1dt getstartedlab_web.2 zhugw/get-started:first myvm2 Running Running 7 minutes ago
dzsianc8h7oz getstartedlab_web.3 zhugw/get-started:first myvm1 Running Running 7 minutes ago
zpb6dc79anlz getstartedlab_web.4 zhugw/get-started:first myvm2 Running Running 7 minutes ago
pg96ix9hbbfs getstartedlab_web.5 zhugw/get-started:first myvm2 Running Running 7 minutes ago
从上面你知道它总是在准备。
我的整个docker-compose.yml
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: zhugw/get-started:first
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
networks:
webnet:
答案 0 :(得分:3)
在学习的同时遇到这个问题。
这是因为您的非聚集映像仍在从步骤2运行,而刚刚部署的聚簇映像在docker-compose.yml文件中使用相同的端口映射(4000:80)。
您有两种选择:
进入docker-compose.yml并将端口映射更改为其他内容,例如4010:80,然后使用更新重新部署群集。然后尝试:http://localhost:4010
删除您在指南的第2步中创建的容器,该容器仍在运行并使用端口映射4000:80
答案 1 :(得分:0)
卷: - " /var/run/docker.sock:/var/run/docker.sock"
应该是
卷: - /var/run/docker.sock:/var/run/docker.sock
这是码头工人导师的错误
答案 2 :(得分:0)
在群集节点之间打开端口7946 TCP / UDP和端口4789 UDP。使用入口网络。如果有效,请告诉我,谢谢。
答案 3 :(得分:0)
让我可以运行可视化工具的原因是将可视化工具图片代码从stable
更改为latest
。
答案 4 :(得分:0)
如果您在Mac上使用Docker工具箱,则应将this签出。
答案 5 :(得分:0)
我有同样的问题。正如在tutorial中所说的(请参阅“是否有连接问题?”),需要打开以下端口:
所以我在群集初始化之前(在创建myvm1和myvm2之后)执行了之前,然后可以访问该服务,例如在浏览器中使用IP_node:4000
$ docker-machine ssh myvm1 "sudo iptables -I INPUT -p tcp --dport 7946 --syn -j ACCEPT"
$ docker-machine ssh myvm2 "sudo iptables -I INPUT -p tcp --dport 7946 --syn -j ACCEPT"
$ docker-machine ssh myvm1 "sudo iptables -I INPUT -p udp --dport 7946 -j ACCEPT"
$ docker-machine ssh myvm2 "sudo iptables -I INPUT -p udp --dport 7946 -j ACCEPT"
$ docker-machine ssh myvm1 "sudo iptables -I INPUT -p udp --dport 4789 -j ACCEPT"
$ docker-machine ssh myvm2 "sudo iptables -I INPUT -p udp --dport 4789 -j ACCEPT"
希望对别人有帮助。