如何让我的机器回到 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:学习以外的东西最好,你运行三位经理(默认经理也是工人)。这样,如果一个节点被杀死,您仍然有一个可行的解决方案。
我有两个 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:学习以外的东西最好,你运行三位经理(默认经理也是工人)。这样,如果一个节点被杀死,您仍然有一个可行的解决方案。