Docker 集装箱ifconfig&;NSIPS don';不匹配

Docker 集装箱ifconfig&;NSIPS don';不匹配,docker,Docker,我正在运行一个名为“前端”的容器。其他容器通过使用名称前端与该容器通信,该名称解析为容器IP地址。我注意到这个容器有点不合我的意思 当我将shell放入容器并运行“ifconfig”时,我看到一个IP地址。当我运行“nslookup front-end”时,我看到另一个IP地址。我想这两个IP应该是匹配的。请参见下面的“我的终端输出”: 我在群集模式下做这件事。以下是我如何启动容器: docker service create --with-registry-auth --name first

我正在运行一个名为“前端”的容器。其他容器通过使用名称前端与该容器通信,该名称解析为容器IP地址。我注意到这个容器有点不合我的意思

当我将shell放入容器并运行“ifconfig”时,我看到一个IP地址。当我运行“nslookup front-end”时,我看到另一个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
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地址
  • redis服务
    将解析为一个虚拟ip,五个redis实例将通过该虚拟ip进行负载平衡
  • 即使只有一个实例也是一样的

在本例中,您是否实际与
前端
容器交互?请编辑答案,首先显示一个
docker ps
,然后是访问
front-end
容器所使用的任何命令。是否使用docker Compose运行多个
front-end
s?不,是前端的单个实例。稍后我将不得不使用“docker ps”命令进行更新。在其他事情的中间。好了,更新了更多的细节。有没有办法列出容器内可用的服务?