我有两个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
答案 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:最好的方法是学习以外,您要运行三个经理(默认情况下,经理也是工人)。这样,如果一个节点被杀死,您仍然可以使用解决方案。