gpt4 book ai didi

docker - docker swarm容器通讯

转载 作者:行者123 更新时间:2023-12-02 18:53:39 25 4
gpt4 key购买 nike

我创建了一个群集并加入一个节点,很好,一切正常

docker swarm init --advertise-addr 192.168.99.1

docker swarm join --token verylonggeneratedtoken 192.168.99.1:2377


我在群组管理器上创建了3个服务

docker service create --replicas 1 --name nginx nginx --publish published=80,target=80

docker service create --replicas 1 --name php php:7.1-fpm published=9000,target=9000

docker service create --replicas 1 --name postgres postgres:9.5 published=5432,target=5432


所有服务都可以正常启动,但是如果我使用自己的应用自定义php镜像,并配置nginx来侦听php fpm套接字,则无法找到一种通信这三种服务的方法。即使我使用“docker exec -it service-id bash”访问服务并尝试ping容器名称或主机名(我什至试图对它们进行 curl )。
我要说的是,我不知道如何配置nginx以连接到fpm,因为我不知道一个容器如何使用swarm与另一个容器进行通信。使用docker-compose或docker run就像使用链接选项一样简单。我已经阅读了所有文档,花了数小时进行反复试验,但我对此一无所知。我已经阅读了有关路由网格的内容,希望将其发布,并且确实可以发布到外部世界,但是我不能希望它为内部容器发布它的ip,也不能是一个随机ip,因为会导致管理我的应用程序配置(甚至是nginx配置)出现问题。

最佳答案

为了使多个容器相互通信,它们接下来要在用户创建的网络上运行。使用群模式时,您想使用覆盖网络,以便容器可以在多个主机上运行。

docker network create -d overlay mynet

然后在该网络上运行服务:
docker service create --network mynet ...

较简单的解决方案是使用compose.yml文件定义每个服务。默认情况下,堆栈中的服务部署在它们自己的网络上:
docker stack deploy -c compose.yml stack-name

关于docker - docker swarm容器通讯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50220590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com