Я только что обнаружил это 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.
Задача решена.
Главное было то, что у меня был дополнительный репозиторий, прямо из докера (https://download.docker.com/linux/ubuntu), который принес проприетарные версии containerd.io, docker-ce и docker-ce-cli. С другой стороны, вселенная Ubuntu даже не входила в мою /etc/apt/source.list
.
Теперь я обновился до 20.04 и использую оригинальные пакеты докеров (docker.io) из вселенной ubuntu. Это работает нормально и отключается, как ожидалось. Я уверен, что это также сработало бы 18.04, но я хотел избежать перехода на более раннюю версию докера, переключив репо.
На моей установке Ubuntu 18.04 systemctl stop docker
выключает все запущенные контейнеры. systemctl start docker
снова запускает все контейнеры. Я согласен с BMitch, для диагностики проблемы потребуется дополнительная информация о вашей установке.
Другой способ выключить все работающие контейнеры:
docker ps -q | xargs docker stop