【问题标题】:Unable to access the services in Docker swarm无法访问 Docker swarm 中的服务
【发布时间】:2020-04-06 05:32:03
【问题描述】:

我对 docker 很陌生,最近我一直在学习 PluralSight 的 Nigel Poulton 课程。现在,我开始按照 swarm 模式的视频教程进行操作,并在视频中进行了详细说明。

我有 6 个 EC2 实例正在运行。我登录了他们每个人并安装了一个码头工人。每台机器上的引擎版本都是18.09.9。现在,我使用以下命令从机器 1 初始化了集群模式:

sudo docker swarm init --advertise-addr 172.31.41.99:2377 --listen-addr 172.31.41.99:2377

然后我得到了workers和managers的token并登录到其他机器,最后创建了3个managers和3个workers。

这就是我的节点最后的样子:

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
sbh3v850ko7h8f279366fxlt9 *   ip-172-31-41-99     Ready               Active              Leader              18.09.9
f7kqsy3yano3vxo8451mi9z7o     ip-172-31-83-172    Ready               Active              Reachable           18.09.9
jb0innx7l4q56kq4dk9phginw     ip-172-31-90-8      Ready               Active                                  18.09.9
xr3oz2x1wyl3a0bd83i3atjk4     ip-172-31-91-47     Ready               Active                                  18.09.9
ttug67rbhfai88wq2sbulo8dm     ip-172-31-94-197    Ready               Active              Reachable           18.09.9
kkun5zo93zxg4jksryvbeh3mt     ip-172-31-94-220    Ready               Active                                  18.09.9

然后我使用以下命令创建了服务:

sudo docker service create --name psight1 -p 8080:8080 --replicas 5 nigelpoulton/pluralsight-docker-ci

现在,当我选择我的机器 1 的公共 DNS 并输入 http://ec2-3-89-157-63.compute-1.amazonaws.com:8080 时,我收到一条错误消息,指出无法访问该站点。

但是,如果我使用命令而不是使用 docker 服务:

docker run -d --name web -p 8080:8080 nigelpoulton/pluralsight-docker-ci

然后,当我转到 http://ec2-3-89-157-63.compute-1.amazonaws.com:8080 时,它可以完美运行。

我看到有一个类似于此的open issue ongoing in github。是因为 docker 18.09.9 中的同样问题还是我遗漏了什么?

【问题讨论】:

    标签: amazon-web-services docker amazon-ec2 docker-swarm docker-swarm-mode


    【解决方案1】:

    您是否创建了覆盖网络并将服务部署到该网络。

    docker network create -d my-net 之类的东西来创建叠加层。

    然后docker service create --network my-net ... 将服务部署到叠加层。

    我已经摸不着头脑了,但覆盖网络可能对于通过任何节点提供服务的路由网格至关重要。

    我在想的是,您可能会遇到集群中没有服务副本的节点。

    另一种测试方法是使用比节点更多的副本进行部署。这应该确保每个节点上至少有一个。

    或者,部署单个副本,找出它正在运行的节点,连接到该节点(浏览器或 curl),然后再次尝试访问未运行副本的节点。

    HTH。还在 Twitter 上 ping 了你。

    @nigelpoulton

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多