Docker daemon неожиданно завершает работу

Dec 01 2020

Докер вышел без видимой причины, и я пытаюсь понять, что произошло.

В настоящий момент демон докера - это загруженная служба, неактивная со статусом выхода 0 УСПЕШНО.

$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Tue 2020-12-01 06:25:16 UTC;
     Docs: https://docs.docker.com
 Main PID: 2218 (code=exited, status=0/SUCCESS)

Глядя на журналы докера, это произошло потому, что он обработал сигнал «завершен»:

$ journalctl -u docker.service | tail -25
Nov 30 18:30:21 ip-10-38-4-210 dockerd[2218]: time="2020-11-30T18:30:21.728694550Z" <redacted irrelevant>
Dec 01 06:25:05 ip-10-38-4-210 systemd[1]: Stopping Docker Application Container Engine...
Dec 01 06:25:05 ip-10-38-4-210 dockerd[2218]: time="2020-12-01T06:25:05.867748396Z" level=info msg="Processing signal 'terminated'"
Dec 01 06:25:16 ip-10-38-4-210 systemd[1]: Stopped Docker Application Container Engine.

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

  • Почему это происходит, какие журналы могут дать ключ к разгадке?
  • Могу ли я настроить dockerd на автоматический перезапуск при выходе?

Это Docker версии 18.09.7 (сборка 2d0083d) в Ubuntu 16.04.6 LTS на x86-64.

Отношения с systemd спрашивают на Unix.stackexchange здесь

Ответы

1 BMitch Dec 01 2020 at 13:17
Dec 01 06:25:05 ip-10-38-4-210 systemd[1]: Stopping Docker Application Container Engine...

На этом этапе systemd отправил докеру запрос на остановку.

Dec 01 06:25:05 ip-10-38-4-210 dockerd[2218]: time="2020-12-01T06:25:05.867748396Z" level=info msg="Processing signal 'terminated'"

Докер получил этот запрос на остановку и корректно завершил работу.

Dec 01 06:25:16 ip-10-38-4-210 systemd[1]: Stopped Docker Application Container Engine.

Systemd теперь сообщает о завершении остановки. 10 секунд, вероятно, принадлежат контейнерам, которые некорректно обработали docker container stopкоманду и были уничтожены через 10 секунд, затем еще секунда для завершения обработки запроса.

Итак, судя по предоставленным журналам, демон dockerd работает так, как было запрошено, и вы должны проверить, что отправило бы systemctl stop dockerкоманду.

Могу ли я настроить dockerd на автоматический перезапуск при выходе?

dockerd не контролирует systemd, systemd контролирует dockerd, поэтому вам нужно будет решить проблему со стороны systemd.


В этом конкретном случае вещь, сообщающая systemd об остановке службы докеров, по-видимому, является службой автоматического обновления Ubuntu, применяющей обновления версии Ubuntu пакета containerd.

https://bugs.launchpad.net/ubuntu/+source/containerd/+bug/1870514

Мое рекомендуемое исправление - установить докер из вышестоящих репозиториев Docker, которые, похоже, не имеют этой проблемы:

https://docs.docker.com/engine/install/ubuntu/