繁体   English   中英

服务重启后 Docker 节点关闭

[英]Docker Node is Down after service restart

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

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

  • docker info说 swarm 是“Pending”
  • docker node ls显示我拥有的唯一节点(Leader),它available但已down
  • journalctl -f -u docker说`level=error msg="错误删除任务" error="不兼容的值模块=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>"
}

如何让我的服务再次运行?

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

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

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

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

2020 年 10 月/19 日更新

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

选项1:

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

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

systemctl stop docker
rm -Rf /var/lib/docker/swarm
systemctl start docker
docker swarm init

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

docker服务重启后的Leader节点宕机了。

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

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

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

码头工人节点ls

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

码头服务更新--force

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM