Docker 如何使我的机器恢复swarm manager状态?

Docker 如何使我的机器恢复swarm manager状态?,docker,docker-compose,docker-swarm,docker-machine,Docker,Docker Compose,Docker Swarm,Docker Machine,我有两个AWS实例: 生产-01 docker机器主机 我使用ssh连接到docker machine master并使用registry auth production运行docker stack deploy-c deploy/docker-compose.yml,我得到以下错误: 此节点不是swarm manager。使用docker swarm init或docker swarm join将此节点连接到swarm,然后重试 我的猜测是swarm manager在某个时候崩溃了,而这个新实

我有两个AWS实例:

生产-01 docker机器主机

我使用ssh连接到docker machine master并使用registry auth production运行docker stack deploy-c deploy/docker-compose.yml,我得到以下错误:

此节点不是swarm manager。使用docker swarm init或docker swarm join将此节点连接到swarm,然后重试

我的猜测是swarm manager在某个时候崩溃了,而这个新实例在保持相同的信息/配置减去swarm manager信息后又出现了一些问题。可能是内部IP改变了什么的。我之所以这样猜测是因为发射时间因月而异。production-01实例在6个月前启动。我不知道,因为我是AWS、Docker和这个项目的新手

我想将代码更改部署到production-01实例,但我没有ssh密钥。另外,我的直觉是production-01是docker-compose.yml文件中记录的副本

我是这个项目上唯一的开发人员,所以任何帮助都将不胜感激

这是我的docker-compose.yml文件的副本,名称已更改

版本:“3” 服务: 数据库: 图片:博士后:10 环境: -POSTGRES_USER=用户 -POSTGRES_密码=通过 部署: 副本:1份 卷数: -db:/var/lib/postgresql/data aservicename: 图片:123.456.abc.amazonaws.com/reponame 端口: - 80:80 取决于: -数据库 环境: 数据库主机:数据库 数据导入存储桶:一些sql存储桶 FQDN:somedomain.com DJANGO_设置_模块:name.SETTINGS.production 调试:正确 部署: 模式:全球 登录中: 司机:awslogs 选项: awslogs组:aservicename 克朗: 图片:123.456.abc.amazonaws.com/reponame 取决于: -数据库 环境: 数据库主机:数据库 数据导入存储桶:一些sql存储桶 FQDN:somedomain.com DOCKER\u设置\u模块:name.SETTINGS.production 部署: 副本:1份 命令:/name/deploy/someshellfile.sh 登录中: 司机:awslogs 选项: awslogs组:cron 网络: 违约: 驱动程序:覆盖 ipam: 驱动程序:默认值 配置: -子网:192.168.100.0/24 卷数: db: 司机:雷克斯雷/ebs

我假设您只有一位经理,而production-01是一名工人

如果docker info显示Swarm:inactive,并且您没有Swarm raft日志的备份,那么您需要使用docker Swarm init创建一个新的Swarm

通过检查docker插件ls,确保它具有rexray/ebs驱动程序。所有节点都需要该插件驱动程序才能使用db卷

如果你不能SSH到production-01,那么就没有办法让它离开并加入新的swarm。您需要部署一个新的工作节点并关闭该现有服务器

然后,您可以再次部署docker stack应用程序,它应该重新连接db卷

注意1:如果堆栈仍在production-01 worker上运行,请不要在新服务器上重新部署堆栈,因为它将失败,因为db的ebs卷仍将连接到production-01

注2:这是最好的学习以外的任何事情,你运行三个经理经理也是工人默认情况下。这样,如果一个节点被杀死,您仍然有一个有效的解决方案