如何让我的机器回到 swarm manager 状态?

How to get my machine back to swarm manager status?

我有两个 AWS 实例:

production-01 docker-machine-master

我 ssh 进入 docker-machine-master 和 运行 docker stack deploy -c deploy/docker-compose.yml --with-registry-auth production,我得到这个错误:

这个节点不是集群管理器。使用 "docker swarm init" 或 "docker swarm join" 将此节点连接到 swarm 并重试

我的猜测是 swarm 管理器在某个时候出现故障,这个新实例启动了一些如何保持相同 information/configuration 减去 swarm 管理器信息。也许内部 IP 改变了或什么的。我之所以做出这样的猜测,是因为发布时间相差数月。 production-01 实例在 6 个月前启动。我不知道,因为我是 AWS、Docker 和这个项目的新手。

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

我是该项目的唯一开发人员,因此非常感谢任何帮助。

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

version: '3' services: database: image: postgres:10 environment: - POSTGRES_USER=user - POSTGRES_PASSWORD=pass deploy: replicas: 1 volumes: - db:/var/lib/postgresql/data aservicename: image: 123.456.abc.amazonaws.com/reponame ports: - 80:80 depends_on: - database environment: DB_HOST: database DATA_IMPORT_BUCKET: some_sql_bucket FQDN: somedomain.com DJANGO_SETTINGS_MODULE: name.settings.production DEBUG: "true" deploy: mode: global logging: driver: awslogs options: awslogs-group: aservicename cron: image: 123.456.abc.amazonaws.com/reponame depends_on: - database environment: DB_HOST: database DATA_IMPORT_BUCKET: some_sql_bucket FQDN: somedomain.com DOCKER_SETTINGS_MODULE: name.settings.production deploy: replicas: 1 command: /name/deploy/someshellfile.sh logging: driver: awslogs options: awslogs-group: cron networks: default: driver: overlay ipam: driver: default config: - subnet: 192.168.100.0/24 volumes: db: driver: rexray/ebs

我假设你只有一个经理,production-01 是一个工人。

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

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

如果您不能通过 SSH 连接到 production-01,那么将无法让它离开并加入新的群。您需要部署一个新的工作节点并关闭该现有服务器。

然后您可以再次 docker stack deploy 该应用程序,它应该会重新连接数据库卷。

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

注2:学习以外的东西最好,你运行三位经理(默认经理也是工人)。这样,如果一个节点被杀死,您仍然有一个可行的解决方案。