gpt4 book ai didi

docker - 多个副本放入docker swarm

转载 作者:行者123 更新时间:2023-12-02 18:54:01 26 4
gpt4 key购买 nike

试图将容器部署到群中。执行命令:

 docker service create --name backend --replicas 3 --publish published=8080,target=80 my-repo/subserver:latest

它启动了3个副本,但是其中一个始终有错误:
docker service ps --no-trunc backend

ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
0759ox8aganle2banj4s1uc31 backend.1 my-repo/subserver:latest Debian-70-wheezy-64-minimal Running Running 2 minutes ago
zjm9tf5ca1t58iuyjsyjqpjnq backend.2 my-repo/subserver:latest Debian-70-wheezy-64-minimal Running Running 2 minutes ago
u9ebicuyh0it6kvpaj9n7id2b backend.3 my-repo/subserver:latest Debian-70-wheezy-64-minimal Ready Ready less than a second ago
4kgwlm4rddj7zefr9tc1xst75 \_ backend.3 my-repo/subserver:latest Debian-70-wheezy-64-minimal Shutdown Failed 2 seconds ago "starting container failed: Address already in use"
dqvsyy5cjd95iid845ylrpdzi \_ backend.3 my-repo/subserver:latest Debian-70-wheezy-64-minimal Shutdown Failed 8 seconds ago "starting container failed: Address already in use"
ki0y94msyswqirm03qr7ldzl6 \_ backend.3 my-repo/subserver:latest Debian-70-wheezy-64-minimal Shutdown Failed 13 seconds ago "starting container failed: Address already in use"
emydpjqzzo5ce2ngid9ap9pb7 \_ backend.3 my-repo/subserver:latest Debian-70-wheezy-64-minimal Shutdown Failed 19 seconds ago "starting container failed: Address already in use"

尝试了不同的端口。
容器包含PHP-FPM和nginx。服务以bash脚本开头:
#!/bin/bash

service nginx start
service php7.0-fpm start

while /bin/true; do
ps aux |grep nginx |grep -q -v grep
PROCESS_1_STATUS=$?
ps aux |grep php |grep -q -v grep
PROCESS_2_STATUS=$?
# If the greps above find anything, they will exit with 0 status
# If they are not both 0, then something is wrong
if [ $PROCESS_1_STATUS -ne 0 -o $PROCESS_2_STATUS -ne 0 ]; then
echo "One of the processes has already exited."
exit -1
fi
sleep 60
done

Docker文件仅公开80端口。

最佳答案

这里发生的是,您正在尝试创建都附加到同一端口的多个服务。只有单个服务可以连接到任何端口-这不是Docker特有的,在将来的技术工作中也会遇到此问题。

然而;令人好奇的是,默认情况下,“群存”模式是ingress网络为set as the default network-这是具有路由网状网络的覆盖网络;实际情况是Docker正在为您处理的第3层IP负载平衡。

所以很好奇您遇到了这个问题-我很想说您正在运行旧版本的Docker。

如果您想自己解决这个问题-最简单的方法是创建覆盖网络,例如:

docker network create --driver overlay my_new_network

然后在创建服务时,请确保指定网络:
docker service create --network my_new_network --name backend --replicas 3 --publish published=8080,target=80 my-repo/subserver:latest

这将解决基于IP的路由;但是,如果您要执行一些基于主机的路由,则可以按照@Markus的说明进行操作,并使用Traefik,Docker Flow Proxy,HAProxy等7层负载均衡器。

关于docker - 多个副本放入docker swarm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47838031/

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