4

我有一個羣集與兩個節點,一個經理和一個工人。我想在swarm中發佈一個端口,這樣我就可以訪問我的應用程序,並且我想知道我是如何實現這個功能的。碼頭部署將不會發布羣中的端口

version: '2' 
services: 
    server: 
    build: . 
    image: my-hub.company.com/application/server:latest 
    ports: 
     - "80:80" 

這暴露端口80,當我跑碼頭工人,組成了,當我運行一個捆綁的部署

docker deploy my-service 

這不會公佈該端口它工作得很好,然而,它只是說, 80/tcp在docker ps中,而不是指向一個端口。也許這是因爲我需要連接一個負載平衡器或者運行一些花哨的命令,或者添加另一個配置層來在多主機羣中實際公開這個端口。

有人可以幫助我瞭解我需要配置/做什麼使這個暴露一個端口。

我最好的情況是,端口80被公開,如果我從不同的主機名訪問它,它會發送給我不同的應用程序。

更新: 看來,如果我運行下面的命令來工作部署

docker service update -p 80:80 my-service_server 
docker kill <my-service_server id> 

我發現這個倉庫中運行的HA代理申請後,它似乎很大,由碼頭工人自己的支持,但是我似乎無法將這種單獨應用於使用新羣集模式的服務。

https://github.com/docker/dockercloud-haproxy

有一個很好的說明在底部描述網絡應該是什麼樣子:

Internet -> HAProxy -> Service_A -> Container A 

但是我無法找到一種方法,通過該泊塢窗服務鏈接服務創建命令,最好現在看起來像一種建立網絡的方式,當我將這個網絡應用於一個服務時,它將在HAProxy中進行檢測。

- Marcus

回答

4

Swarm模式以不同的方式發佈端口。它不會在docker ps中顯示,因爲它不會在主機上發佈端口,它會將端口發佈到所有節點,以便它可以在服務副本之間進行負載平衡。

您應該從docker service inspect my-service看到端口。

任何其他服務應該能夠連接到my-service:80

+0

如果我不希望我的服務將端口暴露爲「已發佈端口」(公開地在羣外),但我確實希望將其暴露給內部(羣內)以供其他服務在羣。 –

+0

然後你不需要做任何事情。只要服務全部在默認網絡上,或者它們全部加入同一個網絡,這就是默認行爲。 – dnephin

5

據我瞭解了你剛纔發佈後更新服務創建端口的那一刻,就像這樣:

docker service update my-service --publish-add 80:80 
0

docker service ls顯示端口映射。