Issue
I've a C++ program running in a docker container. I want to reboot container via my program but I cannot.
Dockerfile:
FROM gcc
WORKDIR /client
COPY . .
RUN apt-get update && apt-get install qt5-qmake qtbase5-dev libmosquitto-dev -y
RUN qmake mainapp.pro && make
RUN chmod +x docker-entrypoint.sh
docker-entrypoint.sh
#!/bin/bash
./mainapp -e
Here is my reboot function (cleared from unnecessary codes):
Logger::getInstance()->write(QString("Sync"));
sync();
Logger::getInstance()->write(QString("Setuid"));
setuid(0);
Logger::getInstance()->write(QString("RB_AUTOBOOT"));
reboot(RB_AUTOBOOT);
Logger::getInstance()->write(QString("Reboot"));
system("reboot");
I can see ALL the outputs and then it prints an error message. Here is the error message:
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
Failed to talk to init daemon.
I tried to reboot from container but it doesn't work as well:
root@93501f6d7fc8:/client# reboot
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
Failed to talk to init daemon.
root@93501f6d7fc8:/client# shutdown -r
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
I've searched this problem and tried most of the suggestions but they didn't solved my problem.
I am open to all your ideas and suggestions.
Solution
Thanks for the answers. I added this to my docker compose yaml file:
privileged: true
restart: always
After that, reboot(RB_AUTOBOOT);
rebooted my container and started the app successfully.
Answered By - Syrenthia Answer Checked By - Senaida (WPSolving Volunteer)