如何使我的机器恢复到群集管理器状态?

时间:2018-06-19 19:23:28

标签: docker docker-compose docker-swarm docker-machine

我有两个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并重试

我的猜测是,群集管理器在某个时候崩溃了,这个新实例使保留相同信息/配置减去群集管理器信息的方式产生了一些变化。也许内部IP发生了变化。我做出这样的猜测是因为启动时间每个月都不同。 production-01实例是六个月前启动的。我不知道,因为我是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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

注2:最好的方法是学习以外,您要运行三个经理(默认情况下,经理也是工人)。这样,如果一个节点被杀死,您仍然可以使用解决方案。