Docker
您如何訪問另一個堆棧中的服務?
我有一個 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-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