连接到同一网络的两个 docker 容器,但不能按名称相互引用,只能引用 IP



我有两个docker容器连接到同一个网络。从容器1中,我可以通过IPping容器2(反之亦然(。但从容器1中,我无法通过名称ping容器2(反之亦然(

根据这一点,我应该能够通过容器名称进行ping:https://docs.docker.com/network/network-tutorial-standalone/#use-用户定义的网桥网络

我做错了什么?

//START MYSQL IN CONTAINER ONE CONNECTING TO TESTNET
PS C:UsersAdministrator> 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:UsersAdministrator> docker run -p 8948:8948 --network testnet -d myexecutable:ubuntu
399c19d4adaf9cb6679ed062cf92455d1dd2d83087d51966e6a4d499dc312909
//BOTH CONTAINERS RUNNING
PS C:UsersAdministrator> 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:UsersAdministrator> 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:UsersAdministrator> 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的解决方案,我不喜欢这个想法。

如何让Docker容器在本地主机上运行时相互通信?

可以';t在同一网络中按名称访问Docker容器

如何在一个网络中配置容器以相互连接(服务器->mysql(?

哇,毕竟它真的很简单。我只需要指定我自己的名字,而不是接受码头工人的名字。

//NOTE THE ADDITION OF --NAME SWITCH
PS C:UsersjohngsourcereposOntic5etrade-rtdRtdActorSystemOutOfProc> 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:UsersjohngsourcereposOntic5etrade-rtdRtdActorSystemOutOfProc> 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

最新更新