Узел Docker не работает после перезапуска службы

Кажется, на моем сервере закончилось место, и у меня возникли проблемы с некоторыми развернутыми стеками докеров. Мне потребовалось некоторое время, чтобы понять это, но в конце концов я удалил пару контейнеров и образов, чтобы освободить место.

Я смог запустить service docker restart, и это сработало. Однако есть некоторые проблемы:

  • docker info говорит, что рой находится в ожидании.
  • docker node ls показывает единственный узел, который у меня есть (Лидер), это 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>"
}

Как мне снова запустить свои службы?


person Christopher Francisco    schedule 19.06.2018    source источник
comment
Сколько руководителей и рабочих? Какие версии движка докера? Какая ОС и дистрибутив?   -  person Bret Fisher    schedule 21.06.2018


Ответы (4)


Иногда при перезапуске или обновлении версии Docker файл tasks.db повреждается.

Это открытая проблема (#34827), некоторые люди предложили обходной путь. проблему с перемещением файла tasks.db и проверкой, устраняет ли это проблему, затем удалите файл tasks.db. Docker автоматически создаст новый для вас.

Вы можете найти файл tasks.db в /var/lib/docker/swarm/worker/

Недавно я столкнулся с той же проблемой, и этот обходной путь спас мой день. . Я не потерял никаких данных, связанных с моими стеками

Обновление 19 октября 2020 г.

проблема (#34827) закрыта, но решение остается прежним, удалите задачи. файл базы данных

person Yor Jaggy    schedule 06.11.2019

Вариант 1:

Ждать. Иногда это лечится само собой.

Вариант 2 (может различаться в зависимости от ОС):

systemctl stop docker
rm -Rf /var/lib/docker/swarm
systemctl start docker
docker swarm init
person Javier Yáñez    schedule 10.01.2019
comment
Стоит отметить, что выполнение этого без резервных копий означает, что вы потеряете все определения в рое. - person Dockstar; 06.11.2019
comment
Да, это не решение для производственного роя. Но только для одного узла для разработки это действительно. - person Javier Yáñez; 06.11.2019
comment
Вместо того, чтобы стирать всю папку swarm (что, по сути, сотрет ваш рой), удалите только /var/lib/docker/swarm/worker/tasks.db. Если вы это сделаете, последний рой докеров не нужен. - person Jeramy Rutley; 10.06.2020

я нашел следующее решение https://forums.docker.com/t/docker-worker-nodes-shown-as-down-after-re-start/22329

Ведущий узел после перезапуска службы докеров был отключен.

Я исправил это, повысив рабочий узел как узел менеджера, а затем на новом узле менеджера понизив неисправный ведущий узел.

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
person Ryabchenko Alexander    schedule 06.11.2019

первая проверка сведений об узле: **

докер узел ls

** если статус узла все еще отображается, а доступность активна, возможно, служба, работающая на узле, останавливается. создать службу в глобальном режиме
ИЛИ обновить глобальную службу, работающую в swarm, с помощью следующих команд:

обновление службы Docker --force

person Nakul Bhandare    schedule 22.10.2019