【问题标题】:Two docker containers attached to same network but can't reference each other by name, only IP两个 docker 容器连接到同一个网络,但不能通过名称相互引用,只有 IP
【发布时间】:2020-03-11 12:34:24
【问题描述】:

我有 2 个运行的 docker 容器连接到同一个网络。在容器 1 中,我可以通过 IP ping 容器 2(反之亦然)。但是在容器 1 中,我无法通过 name ping 容器 2(反之亦然)。

据此,我应该能够通过容器名称 ping:https://docs.docker.com/network/network-tutorial-standalone/#use-user-defined-bridge-networks

我做错了什么?

//START MYSQL IN CONTAINER ONE CONNECTING TO TESTNET
PS C:\Users\Administrator> docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=MyDb -p 3306:3306 --network testnet -d mysql:latest
7ba710ca9ed0ffd346416eae31553460799cc1bedf3f7cfa9d7ef3b369e41f7e

//START MYEXECUTABLE IN CONTAINER TWO CONNECTING TO TESTNET
PS C:\Users\Administrator> docker run -p 8948:8948 --network testnet -d myexecutable:ubuntu
399c19d4adaf9cb6679ed062cf92455d1dd2d83087d51966e6a4d499dc312909

//BOTH CONTAINERS RUNNING
PS C:\Users\Administrator> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                               NAMES
399c19d4adaf        myexecutable:ubuntu    "dotnet myexecut…"   About a minute ago   Up About a minute   0.0.0.0:8948->8948/tcp              optimistic_lamport
7ba710ca9ed0        mysql:latest        "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, 33060/tcp   charming_gates

//INSPECT TESTNET, SEE THAT BOTH CONTAINERS CONNECTED
PS C:\Users\Administrator> docker network inspect testnet
[
    {
        "Name": "testnet",
        "Id": "8db5e107100350f594d405890f94a8f0770aae37ae71a102cbbdb24baa27e117",
        "Created": "2020-03-11T11:24:45.060816989Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "399c19d4adaf9cb6679ed062cf92455d1dd2d83087d51966e6a4d499dc312909": {
                "Name": "optimistic_lamport",
                "EndpointID": "a99566e018a295f28ffc6758e3e78dfa0b1f5292dedfef0546e8ceaed11b2b3d",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            },
            "7ba710ca9ed0ffd346416eae31553460799cc1bedf3f7cfa9d7ef3b369e41f7e": {
                "Name": "charming_gates",
                "EndpointID": "78729185c317d096a637d637929d3bd3d32dec9f5587327bc5703ac708225d37",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

//ATTACH TO CONTAINER ONE SHELL
PS C:\Users\Administrator> docker exec -it optimistic_lamport bash

//PING CONTAINER TWO BY IP - WORKS FINE
    root@399c19d4adaf:/app# ping -c 2 172.18.0.2
    PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
    64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.100 ms
    64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.047 ms

//PING CONTAINER TWO BY NAME - FAIL
    root@399c19d4adaf:/app# ping -c 2 charming_gates
    ping: charming_gates: Name or service not known

//CAT /ETC/HOSTS
    root@399c19d4adaf:/app# cat /etc/hosts
    127.0.0.1       localhost
    ::1     localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.18.0.3      399c19d4adaf

我做错了什么?

我已经查看了这些,似乎有类似的问题,但没有明确的结果。除了一种专门为容器分配 IP 的解决方案,我不喜欢这种想法。

How to get Docker containers to talk to each other while running on my local host?

Can't access Docker container by name in same network

How to configure containers in one network to connect to each other (server -> mysql)?

【问题讨论】:

    标签: docker


    【解决方案1】:

    哇,毕竟它真的很简单。我只需要分配我自己的名字,不接受 docker 发布的名字。

    //NOTE THE ADDITION OF --NAME SWITCH
    PS C:\Users\johng\source\repos\Ontic5\etrade-rtd\RtdActorSystemOutOfProc> docker run --name mysqlcontainer -e MYSQL_ROOT_PASSWORD=my-secret-pw -e MYSQL_DATABASE=mydatabase -p 3306:3306 --network testnet -d mysql:latest
    0bfd4b7ff990ca2ffba8d8a200e33b7c6cee7cc422dad84f50311bfe46cdd468
    
    //NOW CAN PING JUST FINE
    PS C:\Users\johng\source\repos\Ontic5\etrade-rtd\RtdActorSystemOutOfProc> docker exec -it myexecontainer bash
    
    root@a932138635fd:/app# ping mysqlcontainer
    PING mysqlcontainer (172.18.0.3) 56(84) bytes of data.
    64 bytes from mysqlcontainer.testnet (172.18.0.3): icmp_seq=1 ttl=64 time=0.049 ms
    64 bytes from mysqlcontainer.testnet (172.18.0.3): icmp_seq=2 ttl=64 time=0.050 ms
    
    
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多