2017-09-22 25 views
2

发生崩溃,我现在遇到此问题,它说码头群状态处于挂起状态,节点状态为UNKNOWN。这是我的docker info结果无法从待处理状态恢复码头群

[email protected]:~$ docker info 
Containers: 270 
Running: 0 
Paused: 0 
Stopped: 270 
Images: 160 
Server Version: 1.12.2 
Storage Driver: aufs 
Root Dir: /var/lib/docker/aufs 
Backing Filesystem: extfs 
Dirs: 1211 
Dirperm1 Supported: true 
Logging Driver: json-file 
Cgroup Driver: cgroupfs 
Plugins: 
Volume: local 
Network: host bridge null overlay 
Swarm: pending 
NodeID: d9hq8wzz6skh9pzrxzhbckm97 
Is Manager: true 
ClusterID: 5zgab5w50qgvvep35eqcbote2 
Managers: 1 
Nodes: 2 
Orchestration: 
    Task History Retention Limit: 5 
Raft: 
    Snapshot Interval: 10000 
    Heartbeat Tick: 1 
    Election Tick: 3 
Dispatcher: 
    Heartbeat Period: 5 seconds 
CA Configuration: 
    Expiry Duration: 3 months 
Node Address: HIDDEN 
Runtimes: runc 
Default Runtime: runc 
Security Options: apparmor seccomp 
Kernel Version: 4.4.0-91-generic 
Operating System: Ubuntu 16.04.1 LTS 
OSType: linux 
Architecture: x86_64 
CPUs: 2 
Total Memory: 6.804 GiB 
Name: swarm-manager-1 
ID: AXPO:VFSV:TDT3:6X7Y:QNAO:OZJN:U23R:V5S2:FU33:WUNI:CRPK:2E2C 
Docker Root Dir: /var/lib/docker 
Debug Mode (client): false 
Debug Mode (server): false 
Registry: https://index.docker.io/v1/ 
WARNING: No swap limit support 
Insecure Registries: 
127.0.0.0/8 

这是我的搬运工节点LS的结果是:

ID       HOSTNAME   STATUS AVAILABILITY MANAGER STATUS 
9tlo3rg7tuc23xzc3am28lak1 swarm-worker-1 Unknown Active   
d9hq8wzz6skh9pzrxzhbckm97 * swarm-manager-1 Unknown Active  Leader 

我试图重新启动泊坞窗机和虚拟机,但以任何方式于事无补。系统实际上正在运行,因为当我在工作人员中说docker ps时,它显示所有容器,但是在管理器上,docker ps上没有任何东西。

有什么想法?

回答

0

在我使用Swarm的经验中,类似麻烦的唯一解决方案是摧毁群体。而当你这样做时,你应该也可以做一个docker system prune(只有当这些东西没有什么价值可以删除)和service docker restart。然后建立一个新的群体。

它很烂。我知道

0

不是一次只重建整个群体,而是每次尝试删除并重新添加一个节点 - 这样做的好处是群体状态不会被破坏,并且对于较大的群体,服务可以在您修复时继续。但是,如果你没有法定人数的管理者,这个过程就会复杂得多。

首先,请注意节点ID(我将在此处称为$ WORKER_ID和$ MANAGER_ID)。

在管理器节点:

docker node update --availability drain $WORKER_ID 

^这是可选的,但对一大群现场服务工作时,这是一个很好的习惯。

docker swarm join-token manager 

^这个命令会给你的加入命令它删除后的每个节点上运行。我将在下面将它称为$ JOIN_COMMAND。一旦经理重新加入,我们将降级工人。

对工人:

docker swarm leave 
$JOIN_COMMAND 

此节点现在又重新加入了作为一名经理,但我会继续称其为“工人”,以避免混乱。

在经理:

docker node rm $WORKER_ID 
docker node update --availability drain $MANAGER_ID 
docker swarm leave -f 
$JOIN_COMMAND 
docker node rm $MANAGER_ID 
docker node ls 

找到工人的新ID(注意主机名,没有作用) - > $ NEW_WORKER_ID

docker node demote $NEW_WORKER_ID 

你的群应该被刷新 - 如果有更多的节点,每个运行在每个节点上的服务都会迁移到群集中。

如果仍然不起作用(无论如何),你真的应该考虑升级到码头v17.06或更新版本。在此之前,Swarm网络非常不稳定,造成很多来自竞争条件的问题。