如何存取另一個堆疊中的服務?

如何存取另一個堆疊中的服務?

我有一個 docker swarm 配置,在那裡我部署了兩個堆疊(mainmon),我可以在一個堆疊中公開一個端口,並且可以從另一個堆疊中引用它。然而,我試圖找到一種不這樣做的方法,而是讓它使用 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

相關內容