Как выключить хост (ubuntu) внутри контейнера docker - PullRequest
0 голосов
/ 05 августа 2020

Я хотел бы выключить машину (хост), когда контейнер docker завершит работу.

Моя хост-ОС - Ubuntu.

Контейнер может работать как --privileged=true. Это не проблема.

Мне удалось сделать это с помощью команды (найденной в ответе stackoverflow):

subprocess.run("echo 1 > /proc/sys/kernel/sysrq; echo o > /proc/sysrq-trigger", shell=True, check=True)

Проблема с этим подходом заключается в немедленном нечистом завершении работы в Linux.

Если я попробую использовать чистый способ как shutdown now, я получу следующую ошибку: System has not been booted with systemd as init system (PID 1). Can't operate.

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

1 Ответ

0 голосов
/ 06 августа 2020

Если я не пропущу неуказанное ограничение, я не понимаю, почему вы не могли сделать это на хосте из оболочки:

  • docker run image_name; shutdown now

Это потребовало бы, чтобы Dockerfile заканчивался командой CMD или ENTRYPOINT, которая определяет сценарий.

Как только сценарий в контейнере завершится, процесс выполнения docker завершится, и оболочка может перейти к следующей команде shutdown now.

...