发生了崩溃,我现在遇到了这个问题,它说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
上没有任何内容。
有什么想法吗?
答案 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网络非常不稳定,导致很多问题源于竞争条件。