Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker群集容器通信_Docker_Docker Swarm - Fatal编程技术网

docker群集容器通信

docker群集容器通信,docker,docker-swarm,Docker,Docker Swarm,我创建了一个群并加入了一个节点,非常好,一切都很好 docker swarm init--广告地址192.168.99.1 docker swarm加入——令牌verylonggeneratedtoken 192.168.99.1:2377 我在swarm manager上创建了3项服务 docker服务创建--副本1--名称nginx nginx--发布发布=80,目标=80 docker服务创建--副本1--名称php:7.1-fpm published=9000,target=9000 d

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

docker swarm init--广告地址192.168.99.1

docker swarm加入——令牌verylonggeneratedtoken 192.168.99.1:2377

我在swarm manager上创建了3项服务

docker服务创建--副本1--名称nginx nginx--发布发布=80,目标=80

docker服务创建--副本1--名称php:7.1-fpm published=9000,target=9000

docker服务创建--副本1--名称postgres postgres:9.5 published=5432,target=5432

所有服务都可以正常启动,但是如果我用我的应用程序自定义php映像,并将nginx配置为侦听php fpm套接字,我就找不到一种方法来通信这三个服务。即使我使用“docker exec-it service id bash”访问服务并尝试ping容器名或主机名(我甚至尝试将它们卷曲)


我想说的是,我不知道如何配置nginx以连接到fpm,因为我不知道一个容器如何使用swarm与另一个容器通信。使用docker compose或docker run与使用链接选项一样简单。我已经阅读了所有的文档,花了数小时尝试和错误,但我还是无法理解这一点。我读过关于路由网格的文章,wish将发布端口,它确实对外部世界有影响,但我无法在wish ip中找到为内部容器发布的ip,也不能是随机ip,因为这会导致管理我的应用程序配置出现问题,即使是nginx配置。

在同一个映像中组合php\u fpm和nginx更容易、更可靠。我知道这违背了单应用程序图像的官方方式,但是对于像php_fpm+nginx这样的情况,您必须两者都返回请求,这是最好的情况。我这里有一个WIP示例:

要让多个容器相互通信,它们将在用户创建的网络上运行。在swarm模式下,您希望使用覆盖网络,以便容器可以在多台主机上运行

docker network create -d overlay mynet
然后使用该网络运行服务:

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

docker stack deploy -c compose.yml stack-name

或者你可以让一个Docker组合,然后用它们做一个Docker堆栈