
























2026-04-16 13:45 xiashengwang 阅读(13) 评论() 收藏 举报
环境说明
服务器 A(manager 主节点):green-powder-1(你现在这台)
服务器 B(worker 工作节点):另一台服务器
目标:3 个 Nginx 自动分布在两台机器上,能看到请求在两台机器之间切换
端口:9999(不冲突宿主机 Nginx)
1. 确保 Swarm 初始化
docker swarm init
注意 实测2台公网机器,必须显示指定:--advertise-addr (花了1天时间找原因!!)
docker swarm init --advertise-addr <Manager公网IP>:2377
2. 获取【加入集群命令】(关键)
docker swarm join-token worker
你会得到类似这条(复制下来,等下在服务器 B 执行):
docker swarm join --token SWMTKN-1-xxxxxx 104.225.157.258:2377
注意 实测2台公网机器,必须显示指定:--advertise-addr 加入公网和自己的IP才行 (花了1天时间找原因!!)
docker swarm join --token <token> --advertise-addr <Worker公网IP>:2377 <Manager公网IP>:2377
Manager服务器 和 Worker服务器需要开放如下端口(包括服务器操作系统防火墙,云服务商控制面板的防火墙)(花了1天时间找原因!!)
直接粘贴刚才复制的加入命令
docker swarm join --token SWMTKN-1-xxxxxx 104.225.157.258:2377
2个公网机器不是一个内网,需要用下面的命令(花了1天时间找原因!!)
docker swarm join --token <token> --advertise-addr <Worker公网IP>:2377 <Manager公网IP>:2377
看到:This node joined a swarm as a worker. ✅
docker node ls
你会看到 两台机器:
ID HOSTNAME STATUS AVAILABILITY MANAGER
xxx green-powder-1 Ready Active Leader
yyy green-powder-2 Ready Active Worker
先删除旧服务
运行
docker service rm my-nginx
执行这条(最终完美版)
docker service create \
--name my-nginx \
--replicas 4 \
-p 9999:80 \
-e NODE_NAME="{{.Node.Hostname}}" \
nginx \
sh -c 'echo "<h2>容器:$(hostname)</h2><h2 style='color:red'>所在机器:$NODE_NAME</h2>" > /usr/share/nginx/html/index.html && nginx -g "daemon off;"'
docker service ps my-nginx
你会看到:
my-nginx.1 green-powder-1
my-nginx.2 green-powder-2
my-nginx.3 green-powder-1
my-nginx.4 green-powder-2
✅ 4 个副本自动分布在两台服务器上!
连续执行 curl
运行
curl http://104.225.157.258:9999
curl http://104.225.157.258:9999
curl http://104.225.157.258:9999
curl http://104.225.157.258:9999
你会看到真实效果(两台机器交替出现)
容器:my-nginx.1.xxx
所在机器:green-powder-1
容器:my-nginx.2.yyy
所在机器:green-powder-2
服务器 B 执行
docker swarm leave
服务器 A 执行
docker service rm my-nginx
docker swarm leave --force
实测图:

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。