
Я только что обнаружил, что service docker stop
в Ubuntu 18.04 не выключаются все запущенные контейнеры. Я больше не могу ими управлять, но containerd-ship
процессы и все, что находится внутри контейнеров, все еще работают (хотя и не доступны, возможно, потому что сеть была отключена).
Кроме того, остановка containerd ничего не меняет, поскольку по замыслу она не останавливает контейнеры.
И даже после killall containerd-shim
этого, что уже довольно сурово, некоторые процессы все еще работают, например, gunicorn
из gitlab, backuppc и экземпляра Linux UML.
Как мне сделать чистое завершение работы всех запущенных контейнеров? Текущее поведение является причиной того, что моя система зависает при завершении работы.
Обновлять: Я только что увидел, что использую репозиторий (https://download.docker.com/linux/ubuntu) который взят из руководства по Kubernetes (которое я пока не использую). Этот источник содержит проприетарные версии containerd.io, docker-ce и docker-ce-cli
решение1
Задача решена.
Главное, что у меня был дополнительный репозиторий, прямо из докера (https://download.docker.com/linux/ubuntu) который принес проприетарные версии containerd.io, docker-ce и docker-ce-cli. С другой стороны, Ubuntu universe даже не было в моем /etc/apt/source.list
.
Теперь я обновился до 20.04 и использую оригинальные пакеты docker (docker.io) из ubuntu universe. Это работает отлично и завершается, как и ожидалось. Я уверен, что это также сработало бы на 18.04, но хотел избежать понижения версии docker путем переключения репозитория.
решение2
На моем Ubuntu 18.04 установка systemctl stop docker
завершает работу всех запущенных контейнеров. systemctl start docker
запускает все контейнеры снова. Я согласен с BMitch, нужно больше информации о вашей установке, чтобы диагностировать проблему.
Другой способ остановки всех работающих контейнеров:
docker ps -q | xargs docker stop