docker - docker swarm 服务中的 IP 地址错误

标签 docker networking devops swarm

我有一个很奇怪的问题:

我有 swarm 集群,我的一项服务的 IP 错误:

$ docker service inspect nginx_backend | grep Addr
                    "Addr": "10.0.0.107/24"

从集群中的任何容器:
/ # ping nginx_backend
PING nginx_backend (10.0.0.107): 56 data bytes
64 bytes from 10.0.0.107: seq=0 ttl=64 time=0.057 ms
64 bytes from 10.0.0.107: seq=1 ttl=64 time=0.061 ms
64 bytes from 10.0.0.107: seq=2 ttl=64 time=0.064 ms
64 bytes from 10.0.0.107: seq=3 ttl=64 time=0.083 ms
^C
--- nginx_backend ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.057/0.066/0.083 ms

但是在托管 nginx_backend 的服务器中容器:
root@backend:~# docker inspect nginx_backend.1.myzy10psfdl9r4jljrsz5zd5t | grep IPv4
                        "IPv4Address": "10.0.0.87"

当某些服务尝试按名称连接时,它会出现连接错误,但是如果我手动放置像 10.0.0.87 nginx_backend 这样的记录至 /etc/hosts在容器内,它已成功连接。

我做错了什么?)

最佳答案

Docker 为每个服务创建(默认)一个虚拟 IP (VIP)。那是 10.0.0.107 .然后平衡后端容器之间的请求。在第二个示例 ( 10.0.0.87 ) 中,您将看到其中一个容器的 IP 地址。这在 Docker 中也是可路由的(这就是命中 IP 有效的原因)。然而,名称( nginx_backend.1.myzy10psfdl9r4jljrsz5zd5t )不是 DNS 可解析的,所以这就是失败的原因。

您可以通过在 tasks.nginx_backend. 上进行 DNS 查找来找到服务的“后备”容器列表。

更多背景信息:https://docs.docker.com/network/overlay/

关于docker - docker swarm 服务中的 IP 地址错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50590866/

相关文章:

macos - docker-compose 重启后保留以前的环境变量

docker - 如何将带有 README 文件的 docker 镜像推送到 docker hub?

docker - 我没有让 Keycloak 在 Traefik 后面的 docker 中工作

mysql - 如何连接mysql容器?

Azure Release Pipeline - 如何设置代理池

android - 如何通过本地网络中的主机名查找IP地址?

android - Android 上 3G/4G 无线数据连接的 UPnP NAT 穿越

http - "line-based text data: text/html"

azure-devops - AZ Devops Yaml 发布?

docker - 从 Nexus Repository Manager OSS 3.0.1-01 中删除 Docker 镜像