Docker 集装箱ifconfig&;NSIPS don';不匹配
我正在运行一个名为“前端”的容器。其他容器通过使用名称前端与该容器通信,该名称解析为容器IP地址。我注意到这个容器有点不合我的意思 当我将shell放入容器并运行“ifconfig”时,我看到一个IP地址。当我运行“nslookup front-end”时,我看到另一个IP地址。我想这两个IP应该是匹配的。请参见下面的“我的终端输出”: 我在群集模式下做这件事。以下是我如何启动容器:Docker 集装箱ifconfig&;NSIPS don';不匹配,docker,Docker,我正在运行一个名为“前端”的容器。其他容器通过使用名称前端与该容器通信,该名称解析为容器IP地址。我注意到这个容器有点不合我的意思 当我将shell放入容器并运行“ifconfig”时,我看到一个IP地址。当我运行“nslookup front-end”时,我看到另一个IP地址。我想这两个IP应该是匹配的。请参见下面的“我的终端输出”: 我在群集模式下做这件事。以下是我如何启动容器: docker service create --with-registry-auth --name first
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
swarm服务和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”的原因是因为我被扔进了cluster4。如果我将shell放入cluster3,并运行networkinspect命令,我将看到服务“first”。这就是Docker中网络覆盖的工作方式注意IP为10.10.0.6
好的,让我们进入“第二个”,运行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。另外,请注意networkinspect是如何与ifconfig输出匹配的
有人能解释为什么会这样吗?我认为这一切都在起作用。节点之间的连接存在一些问题,不确定这是否与此有关
另一个注意事项是,我正在运行两个名称不同的容器,但即使运行一个容器,我也会看到相同的内容。这是关于
例如:
- 您可以在撰写文件中命名服务
redis service
- 您可以通过redis服务连接到该redis服务器
- 如果将此redis服务复制到五个实例,那么应该解析哪个ip地址
将解析为一个虚拟ip,五个redis实例将通过该虚拟ip进行负载平衡redis服务
- 即使只有一个实例也是一样的
前端
容器交互?请编辑答案,首先显示一个docker ps
,然后是访问front-end
容器所使用的任何命令。是否使用docker Compose运行多个front-end
s?不,是前端的单个实例。稍后我将不得不使用“docker ps”命令进行更新。在其他事情的中间。好了,更新了更多的细节。有没有办法列出容器内可用的服务?