Cannot reboot system from C++

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:

[email protected]:/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.
[email protected]:/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

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published