7

看来我的服务器空间不足,并且我在一些部署的 docker 堆栈上遇到了一些问题。我花了一段时间才弄明白,但最终我还是删除了几个容器和图像以释放一些空间。

我能够运行service docker restart并且它起作用了。但是,存在一些问题:

  • docker info说群是“待定”
  • docker node ls显示我拥有的唯一节点(领导者),available但它是down
  • journalctl -f -u docker说 `level=error msg="error 删除任务" error="incompatible value module=node/agent/worker node.id="

运行时docker service ls,所有服务都有0/1副本。

这是运行时的状态docker node ls

"Status": {
    "State": "down",
    "Message": "heartbeat failure for node in \"unknown\" state",
    "Addr": "<ip and port>"
},
"ManagerStatus": {
    "Leader": true,
    "Reachability": "reachable",
    "Addr": "<ip and port>"
}

我怎样才能让我的服务再次运行?

4

4 回答 4

8

有时,当您重新启动或更新 docker 版本时,tasks.db文件会损坏。

这是一个未解决的问题 ( #34827 ),有些人建议了解决此问题的方法,移动tasks.db文件并测试是否可以解决问题,然后删除 tasks.db 文件。Docker 会自动为你创建一个新的。

您可以在 /var/lib/docker/swarm/worker/中找到tasks.db文件

我最近遇到了同样的问题,这种解决方法挽救了我的一天。我没有丢失任何与我的 Stacks 相关的数据

2020 年 10 月 19 日更新

问题(#34827)已关闭,但解决方案仍然相同,删除 tasks.db 文件

于 2019-11-06T01:49:57.993 回答
3

选项1:

等待。有时它会自行修复。

选项 2(可能因操作系统而异):

systemctl stop docker
rm -Rf /var/lib/docker/swarm
systemctl start docker
docker swarm init
于 2019-01-10T10:03:05.547 回答
0

我找到了下一个解决方案 https://forums.docker.com/t/docker-worker-nodes-shown-as-down-after-re-start/22329

重新启动 docker 服务后的领导节点已关闭。

我通过将工作节点提升为管理节点然后在新的管理节点上降级失败的领导节点来解决此问题。

ubuntu@staging1:~$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
y0363og32cur9xq9yy0nqg6j9 * staging1 Down Active Reachable
x68yyqtt0rogmabec552634mf staging2 Ready Active

ubuntu@staging1:~$ docker node promote staging2

root@staging1:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
plxkuqqnkxotrzy7nhjj27w34 * staging1 Down Active Leader
x68yyqtt0rogmabec552634mf staging2 Ready Active Reachable

root@staging2:~# docker node demote staging1

root@staging2:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
plxkuqqnkxotrzy7nhjj27w34 staging1 Down Active
x68yyqtt0rogmabec552634mf * staging2 Ready Active Leader

root@staging2:~# docker node rm staging1

Get join-token from leader node:
root@staging2:~# docker swarm join-token manager

Reconnect failed node to docker swarm cluster:

root@staging1:~# docker swarm leave --force
root@staging1:~# systemctl stop docker
root@staging1:~# rm -rf /var/lib/docker/swarm/
root@staging1:~# systemctl start docker
root@staging1:~# docker swarm join --token XXXXXXXX 192.168.XX.XX:2377

root@staging1:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
y0363og32cur9xq9yy0nqg6j9 * staging1 Ready Active Reachable
x68yyqtt0rogmabec552634mf staging2 Ready Active Leader

root@staging1:~# docker node demote staging2

root@staging1:~# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
y0363og32cur9xq9yy0nqg6j9 * staging1 Ready Active Leader
x68yyqtt0rogmabec552634mf staging2 Ready Active
于 2019-11-06T16:12:33.407 回答
-2

首先检查节点的详细信息:**

码头工人节点ls

** 如果节点的状态仍显示为关闭且可用性处于活动状态,则可能是在节点上运行的服务停止。将服务创建为全局模式
或通过以下命令更新在 swarm 中运行的全局服务:

泊坞窗服务更新--force

于 2019-10-22T04:38:05.227 回答