用docker 部署springCloud 微服務不能識別註冊中心eureka的問題

這個問題折騰了我兩天,總算是處理了,今天整理一下自己處理的過程,給遇到的朋友一點思路。

我遇到的錯誤如下:

 

 

 

解決思路:

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

啓動之後就可以註冊了,

註冊成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章