gpt4 book ai didi

docker - 为什么无法通过名称或 VIP 访问 Docker Swarm 中的服务?

转载 作者:行者123 更新时间:2023-12-02 08:09:37 28 4
gpt4 key购买 nike

所以我有一个在 Ubuntu 主机上运行的 docker 引擎(版本 1.12.6,内部版本 78d1802)。

我使用以下方法创建了一个群:

docker swarm init --advertise-addr 192.168.1.2

我有一个本地预构建的镜像,我使用它创建一个名为 nodeapp 的服务,如下所示

docker service create --name nodeapp --publish 3000:3000 --replicas 2 node-app-image

现在,当我输入 curl localhost:3000 时,我得到了预期的正确响应,并且到目前为止一切正常。

This document我提到的许多其他人似乎都表明 docker v1.12.x 通过 DNS 或 VIP 方法内置了负载平衡/路由。

所以我尝试通过服务名称或虚拟 IP 访问我的服务,如下所示

curl nodeapp:3000 我得到 curl: (6) Could not解析主机:nodeapp

curl 10.255.0.6:3000 我得到 curl: (7) Failed to connect to 10.255.0.6 port 3000: Connection timed out

注意,我使用了以下命令来获取虚拟ip

docker service inform --format {{.Endpoint.VirtualIPs}} nodeapp 产生 [{boq3g7s47w47q2ej56li9s3dw 10.255.0.6/16}]

为什么我无法使用 VIP 或服务名称访问我的服务,即使我可以使用 localhost:3000 访问它?

最佳答案

来自this页面:

By default, when you create a service attached to a network, the swarm assigns the service a VIP. The VIP maps to a DNS alias based upon the service name. Containers on the network share DNS mappings for the service via gossip so any container on the network can access the service via its service name.

因此,dns 解析似乎只能在容器之间工作,而不能在主机上工作(至少默认情况下,我认为有一种方法可以在主机上配置 dns 来解析这些服务)。

例如,创建一个运行nginx的服务:

docker service create \
--replicas 3 \
--name my-web \
--network my-network \
nginx

查看服务:

$ docker service ps my-web

NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
my-web.1.63s86gf6a0ms34mvboniev7bs nginx node1 Running Running 58 seconds ago
my-web.2.6b3q2qbjveo4zauc6xig7au10 nginx node2 Running Running 58 seconds ago
my-web.3.66u2hcrz0miqpc8h0y0f3v7aw nginx node3 Running Running about a minute ago

创建一个新的服务/容器:

$ docker service create \
--name my-busybox \
--network my-network \
busybox \
sleep 3000

查看容器:

$ docker service ps my-busybox

NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
my-busybox.1.1dok2cmx2mln5hbqve8ilnair busybox node1 Running Running 5 seconds ago

输入容器:

$ docker exec -it my-busybox.1.1dok2cmx2mln5hbqve8ilnair /bin/sh

从容器内,您可以解析 nginx 服务:

$ nslookup my-web

Server: 127.0.0.11
Address 1: 127.0.0.11

Name: my-web
Address 1: 10.0.9.2 ip-10-0-9-2.us-west-2.compute.internal

关于docker - 为什么无法通过名称或 VIP 访问 Docker Swarm 中的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43440212/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com