所以我有一個在Ubuntu主機上運行的docker引擎(版本1.12.6,build 78d1802)。爲什麼我無法通過名稱或VIP訪問Docker羣集中的服務?
我創建開始使用
docker swarm init --advertise-addr 192.168.1.2
我使用,我創建了一個名爲nodeapp服務如下
docker service create --name nodeapp --publish 3000:3000 --replicas 2 node-app-image
現在本地預置的圖像當我輸入curl localhost:3000
我得到預期的正確的一個羣迴應和一切工作到這一點。
This document和我提到的很多其他人似乎建議docker v1.12.x通過DNS或VIP方法內置負載平衡/路由。
所以我想通過服務名稱或虛擬IP來訪問我的服務如下
curl nodeapp:3000
,而我得到curl: (6) Could not resolve host: nodeapp
和
curl 10.255.0.6:3000
,而我得到curl: (7) Failed to connect to 10.255.0.6 port 3000: Connection timed out
請注意,我使用以下命令獲取虛擬IP
docker service inspect --format {{.Endpoint.VirtualIPs}} nodeapp
其中收益率爲[{boq3g7s47w47q2ej56li9s3dw 10.255.0.6/16}]
爲什麼我無法使用VIP或服務名稱訪問我的服務,即使我可以使用localhost:3000訪問它?
感謝@約翰。這有助於我理解這個問題。好,如果別人可以闡明如何使用單個ip或DNS從外部暴露羣集,這與傳統的負載平衡設置將如何執行相似,但沒有靜態鏈接任何工作節點(即在nginx配置文件中),同時考慮到我們可以隨後發佈docker服務規模和docker swarm連接命令,以擴展解決方案需要自動包含新節點的位置。這甚至可能嗎? – Harindaka
我不知道這是否會有所幫助https://github.com/vfarcic/docker-flow-proxy – Harindaka
Docker swarm網絡自動負載均衡服務的副本,關於「靜態鏈接」,這正是dns的目的。在運行api和服務API之間有一個不同之處,你想在羣集中做什麼,它不是公開,而是發佈它們。看看這個頁面 - > https://docs.docker.com/docker-cloud/apps/ports/ – Dani