1. 程式人生 > >微服務Docker化註冊中心網絡處理

微服務Docker化註冊中心網絡處理

docker docker-compose docker網絡

微服務Docker化

docker網絡有三種模式,可以在啟動時通過--net=來指定

--net=bridge 默認選項,用網橋的方式來連接docker容器。

--net=host docker跳過配置容器的獨立網絡棧。本質上來說,這個參數告訴docker不去打包容器的網絡層。當然,docker 容器的進程仍然被限制在它自己獨有的文件系統、進程列表以及其他資源中。一個快速命令 ip addr 將像你展示docker的網絡,它是建立在docker 宿主主機上的,有完整的權限去訪問宿主主機的網絡接口。註意這不意味著docker容器可以去重新配置宿主主機的網絡棧,重新配置是需要 --privaleged=true 這個選項參數的,但是這個選項參數會讓docker容器打開大量的端口以及其他的系統的超級管理權限的進程。這也會允許容器去訪問宿主主機的網絡服務,比如 D-bus。這會使docker容器裏的進程有有權限去做一些意想不到的事,比如重啟你的宿主主機。所以要謹慎使用這個選項參數。

--net=container:NAME_or_ID 告訴docker讓這個新建的容器使用已有容器的網絡配置。這個新建的容器將配置新的自己的文件系統和進程列表以及其他資源限制,但是將共享這個指定的容器的網絡IP地址以及端口號,使得這兩個容器可以通過 loopback接口相互訪問。

--net=none 告訴docker為新建的容器建立一個網絡棧,但不對這個網絡棧進行任何配置。

在默認情況下10.120.10.128啟動微服務

docker run -tid --name microsrv_error -p 9000:9000 -v  /Sioeye/Data/logs/error:/sioeye_apps/logs -v /Sioeye/SioApps/Config/startup_cmd:/sioeye_apps/startup_cmd registry.cn-beijing.aliyuncs.com/sioeye_service_2_0/microsrv_error:8d7035f55a21f1411d732a0cd13b81346fdd4587

遇到問題

啟動後會在微服務會向註冊中心eureka註冊自己的服務,由於默認使用bridge模式故無法獲取到宿主機本機IP地址,註冊到註冊中心的地址就為類似cf67c07884bf:error-collector-server:9000 而不是宿主機IP地址,這樣無法通過註冊中心查找微服務來進行訪問,但是可以直接通過宿主機ip 10.120.10.128:9000來進行訪問。

解決這個問題有兩個思路:

1、通過--add-host方式或者傳遞變量將宿主機ip傳給docker,docker內微服務使用此地址向eureka註冊,但這種方式需要修改各微服務代碼;

2、直接使用--net=host 使用宿主機網絡。此方式僅需要在docker run的時候添加--net=host參數即可。

解決

重新啟動10.120.10.128微服務

docker run -tid --name microsrv_error -p 9000:9000 -v  /Sioeye/Data/logs/error:/sioeye_apps/logs -v /Sioeye/SioApps/Config/startup_cmd:/sioeye_apps/startup_cmd --net=host registry.cn-beijing.aliyuncs.com/sioeye_service_2_0/microsrv_error:8d7035f55a21f1411d732a0cd13b81346fdd4587

查看註冊中心: 10.120.10.128:error-collector-server:9000 ,此時即可通過註冊中心訪問微服務。


本文出自 “Kirito” 博客,請務必保留此出處http://aaronchou.blog.51cto.com/8981576/1965565

微服務Docker化註冊中心網絡處理