自定義Docker容器的 hostname


自定義Docker容器的 hostname

 

作者: John Deng

原創內容,歡迎傳播,請注明出處:http://www.cnblogs.com/johnd/p/set-docker-hostname.html

因為要部署 dubbo 服務到 docker 集群,在部署時遇到一個問題,就是dubbo會去獲取 /etc/hosts 下面的 hostname 對應的IP地址作為 zookeeper 注冊中心注冊的 IP 地址,由於 docker 容器的 IP 是 172.17.0.2, 那注冊到 zookeeper 的 IP 也就是 172.17.0.2 了。

那問題就來了,172.17.0.2 是 docker 容器的 IP, 容器外面是無法訪問的,我的解決方案很簡單,就是更改容器的 hostname 及其映射的 IP 來使得 dubbo 可以注冊宿主的 IP 地址。

我是使用 docker-compose 來啟動的, 在 docker-compose.yml 中添加 environment 和 extra_hosts 兩個參數即可解決:

1
2
3
4
5
6
7
8
9
10
11
dubbo-service-provider:
   image: johnd/dubbo-service-provider:latest
   ports:
     - 9090:9090
     - 20880:20880
 
   environment:
     HOSTNAME: dubbo-service-provider
 
   extra_hosts:
      dubbo-service-provider: 192.168.0.100

然后運行 docker-compose up 命令,可以看到 dubbo 已經注冊了正確的 IP 地址:

 [DUBBO] Register: dubbo://192.168.0.100:20880/com.johnd.dubbo.service.api.SayHelloToJohn

如果你是用 docker run  來運行 docker 容器,也可以添加相應的命令行參數。

------------------------------------------------------------------------------------------------------------

更新:

其實可以有更簡單的處理辦法,就是直接使用主機網絡,在docker-compose的配置文件添加 net: host 配置。

復制代碼
dubbo-service-provider:
  image: johnd/dubbo-service-provider:latest
net: host ports: - 9090:9090 - 20880:20880
復制代碼

 

 

如果你對本文有任何疑問,請留言,或者寫郵件給我: john.deng@outlook.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM