
我有一個 docker swarm 配置,在那裡我部署了兩個堆疊(main
和mon
),我可以在一個堆疊中公開一個端口,並且可以從另一個堆疊中引用它。然而,我試圖找到一種不這樣做的方法,而是讓它使用 127.0.0.11 DNS 存取它。
我mon
有一項名為grafana
使用https://docs.docker.com/docker-cloud/apps/service-links/#discovering-services-or-containers-on-another-stackping grafana.mon
這表明我可以使用堆疊名稱來引用它,當我嘗試它只是返回無效的主機名稱時,它不起作用。
答案1
為此,您所需要做的就是使其使用相同的網絡,然後它們就會可見。就我而言,我定義了一個名為 的網絡public
,它由我的所有堆疊從外部引用
docker network create -d overlay --attachable public
從我的 docker-compose.yml 檔案我有
networks:
public:
external:
name: public
要存取它,只需使用服務名稱即可。
答案2
您需要讓兩個堆疊能夠透過覆蓋網路類型進行連接,然後允許兩個堆疊使用(至少在所需的服務上)在兩個堆疊外部建立的覆蓋網路。
覆蓋網路應在堆疊建立之前創建,以便需要連接的服務可以「附加」到它。
像這樣創建網絡
docker network create --driver overlay --attachable
然後在你的env檔案中引用服務名稱,你可以檢查你的服務呼叫了什麼名稱
docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
vkz5vccbmce7 foo-stack_por-service replicated 1/1 por-service:1.0.0 *:33065->3306/tcp
sjpnrkm1iiha foo-stack_vic-service replicated 1/1 vic-service:1.0.0 *:8081->80/tcp
0capavl31oab bar-stack_tar-service replicated 1/1 tar-service:1.0.0 *:33066->3306/tcp
9vohh24jt6hy bar-stack_zen-service replicated 1/1 zen-service:1.0.0 *:8082->80/tcp
現在從 NAME 欄位取得服務的名稱。前任:巴-stack_tar-服務
請注意,您的服務以部署時提供的堆疊名稱為前綴
docker stack ls
NAME SERVICES ORCHESTRATOR
foo-stack 2 Swarm
bar-stack 2 Swarm