简体   繁体   中英

Two docker containers attached to same network but can't reference each other by name, only IP

I have 2 docker containers running attached to same network. From within container 1 I can ping container 2 by IP (and vice versa). But from within container 1 I can't ping container 2 by name (nor vice versa).

According to this I should be able to ping by container name: https://docs.docker.com/network/network-tutorial-standalone/#use-user-defined-bridge-networks

What am I doing wrong?

//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

What am I doing wrong?

I've reviewed these, that seem to have similar issues but no definitive result. Except one solution to specifically allocate an IP to the container, which I don't like the idea of.

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)?

Wow after all that it was really simple. I just needed to assign my own name, not accept the docker issued name.

//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



The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM