无法从待处理状态

时间:2017-09-22 13:53:57

标签: docker virtual-machine containers docker-swarm

发生了崩溃,我现在遇到了这个问题,它说docker swarm状态为pending,节点状态为UNKNOWN。这是我的docker info结果

swarm@swarm-manager-1:~$ 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

这是我的docker节点ls结果:

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

我尝试重新启动docker引擎和VM,但不以任何方式提供帮助。系统实际上正在运行,就像我在工作室中说docker ps它显示所有容器,但在管理器上docker ps上没有任何内容。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

根据我使用Swarm的经验,解决类似问题的唯一方法是摧毁群体。当你这样做时,你可能也应该docker system prune(只有在没有任何有价值的东西可以删除的情况下)和service docker restart。然后建立一个新的群。

太糟糕了。我知道

答案 1 :(得分:0)

不是一次只重建整个群,而是可以尝试一次删除和重新添加每个节点 - 这样做的好处是群集状态不会被破坏,并且在更大的群上,服务可以你解决它时继续。但是,当你没有法定人数的管理人员时,这个过程要复杂得多。

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

在经理节点上:

docker node update --availability drain $WORKER_ID

^这是可选的,但在群体上使用实时服务时这是一个好习惯。

docker swarm join-token manager

^此命令将为您提供join命令,以便在删除后在每个节点上运行。我将在下面将其称为$ 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

您的swarm应该刷新 - 如果有更多节点,当您耗尽每个节点时,每个节点上运行的服务都会迁移到swarm中。

如果它仍然无法工作(并且无论如何),那么确实应该考虑升级到docker v17.06或更新版本。在此之前,Swarm网络非常不稳定,导致很多问题源于竞争条件。