這個問題折騰了我兩天,總算是處理了,今天整理一下自己處理的過程,給遇到的朋友一點思路。
我遇到的錯誤如下:
解決思路:
1、查看host 中是否有配置別名映射:
$ vi /etc/hosts
27.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 eureka
2、如果有配置host,則進入容器內部是否能ping通註冊中心
root@xcloud-eureka /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7488cfaefd3c config "java -jar co…" 2 hours ago Up 2 hours 0.0.0.0:8080->8080/tcp config
0321e9b6b1f7 eureka "java -jar eu…" 23 hours ago Up 21 hours 0.0.0.0:8761->8761/tcp eureka
[root@xcloud-eureka /]# sudo docker exec -it 7488cfaefd3c /bin/bash
root@7488cfaefd3c:/# ifconfig
bash: ifconfig: command not found
root@7488cfaefd3c:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
13: eth0@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:13:00:03 brd ff:ff:ff:ff:ff:ff
inet 172.19.0.3/16 brd 172.19.255.255 scope global eth0
valid_lft forever preferred_lft forever
root@7488cfaefd3c:/# ping 172.19.0.2
PING 172.19.0.2 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: icmp_seq=0 ttl=64 time=0.229 ms
64 bytes from 172.19.0.2: icmp_seq=1 ttl=64 time=0.202 ms
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.199/0.210/0.229/0.000 ms
如果ip ping 的通,在ping服務名稱,如果不通則配置host文件沒有生效,生效後就可以ping 通
root@7488cfaefd3c:/# ping eureka
ping: unknown host
root@7488cfaefd3c:/# ping eureka
PING xcloud-eureka (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: icmp_seq=0 ttl=64 time=0.113 ms
64 bytes from 172.19.0.2: icmp_seq=1 ttl=64 time=0.203 ms
^C--- xcloud-eureka ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.113/0.158/0.203/0.045 ms
如果 容器內部ip ping 不通,看看兩個容器的ip 的網段是否一致 ,例如 :
172.22.0.1 和 172.22.0.2 是同一個網段,172.22.0.1 和 172.21.0.2 是不同的網段,
不通的網段說明用的網卡不一樣,查看一下docker 的網絡類型
root@7488cfaefd3c:/# exit
exit
[root@eureka /]# docker network ls
NETWORK ID NAME DRIVER SCOPE
c48055f17528 bridge bridge local
759a41a8e646 config_default bridge local
29acb7569bed dev_default bridge local
052bcea27972 eureka_default bridge local
5dc5a146099e host host local
375f94eb56fe none null local
可以看到有幾個不通的網絡,註冊中心的網絡是 eureka_default 這個,所以在創建容器的時候需要指定網卡和ip
docker network inspect eureka_default 命令可以查看 eureka_default 這個網絡類型下的容器的詳細情況所佔有的ip:
[root@eureka /]# docker network inspect eureka_default
[
{
"Name": "eureka_default",
"Id": "052bcea2797269c2176bd8cc4872809425cee5fdb6b88ff4d44379ee8f5f4afa",
"Created": "2021-02-24T12:34:16.455836148+08:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"0321e9b6b1f7b2c536f72483be33c236b79aa62654aebf6cb385f644e6693498": {
"Name": "eureka",
"EndpointID": "e2c4afbfd832db8a8ef51758b16b8ec86be25901a238ef22292ab8cd7860dc88",
"MacAddress": "02:42:ac:13:00:02",
"IPv4Address": "172.19.0.2/16",
"IPv6Address": ""
},
"7488cfaefd3c7f871d7e9386f45f9c703e407a7fac69c65e5bea9985e32d4c59": {
"Name": "config",
"EndpointID": "31c95d51c2bb23f2843fd8a37c85848a5f6a86660d0349bc2e4462c0674c55a6",
"MacAddress": "02:42:ac:13:00:03",
"IPv4Address": "172.19.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "default",
"com.docker.compose.project": "eureka",
"com.docker.compose.version": "1.22.0"
}
}
]
docker run --name config -d --network=eureka_default --ip 172.19.0.3 -p 8080:8080 config
docker run --name config -d --network=eureka_default --ip 172.19.0.3 -p 8080:8080 config
啓動之後就可以註冊了,
註冊成功