Docker

您如何訪問另一個堆棧中的服務?

  • November 8, 2020

我有一個 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-stack這表明我可以使用堆棧名稱來引用它當我嘗試它時不起作用,ping grafana.mon它只是返回了無效的主機名。

為此,您只需使其使用相同的網路,然後它們將可見。在我的情況下,我定義了一個名為 的網路public,我的所有堆棧都在外部引用它

docker network create -d overlay --attachable public

從那裡在我的 docker-compose.yml 文件中我有

networks:
 public:
   external:
     name: public

要訪問它,只需使用服務名稱。

您需要啟用兩個堆棧以通過覆蓋網路類型連接,然後允許兩個堆棧使用(至少在所需的服務上)在兩個堆棧外部創建的覆蓋網路。

覆蓋網路應該在堆棧建立之前創建,因此需要連接的服務可以“附加”到它。

像這樣創建網路

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 列中獲取服務的名稱。例如:bar-stack_tar-service

請注意,您的服務以您在部署時提供的堆棧名稱為前綴

docker stack ls

NAME                SERVICES            ORCHESTRATOR
foo-stack           2                   Swarm
bar-stack           2                   Swarm

引用自:https://serverfault.com/questions/904535