在群集上部署应用程序但无法成功访问它

问题描述 投票:6回答:6

我现在正在学习使用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:
docker-swarm
6个回答
3
投票

在学习的同时遇到这个问题。

这是因为您的非聚集映像仍在从步骤2开始运行,而刚刚部署的聚簇映像在docker-compose.yml文件中使用相同的端口映射(4000:80)。

您有两种选择:

  1. 进入docker-compose.yml并将端口映射更改为其他内容,例如4010:80,然后使用更新重新部署群集。然后尝试:http://localhost:4010
  2. 删除在指南的第2步中创建的容器,该容器仍在运行并使用端口映射4000:80

0
投票

卷: - “/var/run/docker.sock:/var/run/docker.sock”

应该

卷: - /var/run/docker.sock:/var/run/docker.sock

这是码头工人导师的错误


0
投票

在群集节点之间打开端口7946 TCP / UDP和端口4789 UDP。使用入口网络。如果有效,请告诉我,谢谢。


0
投票

让我看到运行可视化器的原因是将可视化器图像标签从stable更改为latest


0
投票

如果您使用Docker toolbox for mac,那么您应该检查this


0
投票

我有同样的问题。正如它在tutorial中所说的那样(参见“连接故障?”),需要打开以下端口:

  • 端口7946 TCP / UDP用于容器网络发现。
  • 端口4789 UDP用于容器入口网络。

所以我在swarm init之前(在创建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"

希望它能帮助别人。

© www.soinside.com 2019 - 2024. All rights reserved.