gpt4 book ai didi

docker - 容器ifconfig和nslookup IP不匹配

转载 作者:行者123 更新时间:2023-12-02 20:19:00 26 4
gpt4 key购买 nike

我正在运行一个名为“前端”的容器。其他容器使用前端名称与该容器通信,该名称被解析为容器IP地址。我注意到这个容器对我来说没有意义。

当我将其装入容器并运行“ifconfig”时,我看到一个IP地址。当我运行“nslookup前端”时,我会看到另一个IP地址。不过,我希望这两个IP应该匹配。请参阅下面的终端输出:

我正在以群体模式进行此操作。这是我启动容器的方法:

docker service create --with-registry-auth --name first --network my-network aarch64/ubuntu:16.04 sleep 99999999999999999
docker service create --with-registry-auth --name second --network my-network aarch64/ubuntu:16.04 sleep 99999999999999999

终端输出以确认容器已启动并正在运行:
odroid@odroid64-cluster4:~/ssd/weaveworksdemo$ docker service ls
ID NAME REPLICAS IMAGE COMMAND
7v04cpi9b8uq second 1/1 aarch64/ubuntu:16.04 sleep 99999999999999999
cru6diqlv5on first 1/1 aarch64/ubuntu:16.04 sleep 99999999999999999

群服务和docker PS命令
odroid@odroid64-cluster4:~/ssd/weaveworksdemo$ docker service ps first
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
4dqy376icyi8fow1y1owwjzj0 first.1 aarch64/ubuntu:16.04 odroid64-cluster3 Running Running 2 minutes ago
odroid@odroid64-cluster4:~/ssd/weaveworksdemo$ docker service ps second
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
aurs8nznz35to7pjcikn9903h second.1 aarch64/ubuntu:16.04 odroid64-cluster4 Running Running 2 minutes ago
odroid@odroid64-cluster4:~/ssd/weaveworksdemo$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd28f6ec30e1 aarch64/ubuntu:16.04 "sleep 99999999999999" 3 minutes ago Up 3 minutes second.1.aurs8nznz35to7pjcikn9903h

可以看出。首先运行在cluster3上,其次运行在cluster4上。

现在,让我们看一下我的网络检查:
odroid@odroid64-cluster4:~/ssd/weaveworksdemo$ docker network inspect my-network
[
{
"Name": "my-network",
"Id": "3kjlgo564nkmnccliuz7rlxa3",
"Scope": "swarm",
"Driver": "overlay",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "10.10.0.0/24",
"Gateway": "10.10.0.2"
}
]
},
"Internal": false,
"Containers": {
"cd28f6ec30e1ab33c09ef20ef4ee3968d7e7d71f83608a7ebd995986f9c7a049": {
"Name": "second.1.aurs8nznz35to7pjcikn9903h",
"EndpointID": "bf3089daf09a9de1a9b245807d8b3cb3cbee1d3e28887f8f8b5a375ba72d9e18",
"MacAddress": "02:42:0a:0a:00:06",
"IPv4Address": "10.10.0.6/24",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.driver.overlay.vxlanid_list": "258",
"encrypted": ""
},
"Labels": {}
}
]

您只看到容器服务“second”的原因是因为我被shell4集群了。如果我要进入cluster3,然后运行network inspect命令,我将看到服务“first”。这就是网络覆盖在Docker中的工作方式。 请注意IP为10.10.0.6

好了,让我们进入“second”并运行ifconfig和nslookup。
odroid@odroid64-cluster4:~/ssd/weaveworksdemo$ docker exec -ti second.1.aurs8nznz35to7pjcikn9903h bash
root@cd28f6ec30e1:/# ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:0a:0a:00:06
inet addr:10.10.0.6 Bcast:0.0.0.0 Mask:255.255.255.0
inet6 addr: fe80::42:aff:fe0a:6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1424 Metric:1
RX packets:13 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1038 (1.0 KB) TX bytes:648 (648.0 B)

eth1 Link encap:Ethernet HWaddr 02:42:ac:12:00:03
inet addr:172.18.0.3 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe12:3/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7374 errors:0 dropped:0 overruns:0 frame:0
TX packets:6551 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:36597121 (36.5 MB) TX bytes:443087 (443.0 KB)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:4096 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:876 (876.0 B) TX bytes:876 (876.0 B)

root@cd28f6ec30e1:/# nslookup second
Server: 127.0.0.11
Address: 127.0.0.11#53

Non-authoritative answer:
Name: second
Address: 10.10.0.5

注意ifconfig如何显示10.10.0.6,解析名称“front-end”将返回10.10.0.5。另外,请注意网络检查如何与ifconfig输出匹配。

谁能解释为什么会这样?我收回一切正常。节点之间的连接存在一些问题,不确定是否可能与此有关。

另一个要注意的是,我正在运行两个名称不同的容器,但是即使运行单个容器,我也会看到相同的东西。

最佳答案

关于Docker Virtual-IP

例如:

  • 您在撰写文件中命名服务redis-service
  • 您可以通过redis-service连接到该Redis服务器。
  • 如果将此Redis服务复制到五个实例,那么redis-service应该解析为哪个IP地址?
  • redis-service将解析为一个虚拟IP,并将通过此虚拟IP对五个Redis实例进行负载平衡。
  • 即使您只有一个实例也是如此。
  • 关于docker - 容器ifconfig和nslookup IP不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40335521/

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