[Ubuntu] docker container 에서 systemctl 사용시 발생하는 문제: System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down

STEVELOPER·2023년 1월 16일
1

docker

목록 보기
4/4

ubuntu 에서 docker 로 ubuntu container 를 만들고 나서 cron 을 돌려야하는 상황이었다.
제대로 돌아가지 않는듯 보여 cron 을 재시작 했으나 여전히 1분마다 찍어본 log 가 찍히지않아
cron 이 제대로 돌고 있지 않다고 판단했다.
cron 시작 명령어는 다음과 같다

// cron 시작
sudo service cron start
// cron systemctl 활성화
sudo systemctl enable cron.service
// cron systemctl 등록 확인
sudo systemctl list-unit-files | grep cron
sudo service cron status

상기 코드로 cron 을 시작했으나 다음 코드를 통해 문제가 있음을 확인했다.

sudo systemctl status cron
//error
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

docker 는 기본적으로 컨테이너에 systemctl 을 사용하지 못하도록 되어있다고 한다.
권한을 제한하기 위해서라고한다.
이를 해결하기 위해서는 container 를 하기 옵션을 주어 새로 생성해야한다.

sudo docker run -it -d --privileged=true --name "name" imagename:tag /sbin/init

상기 코드에서 systemctl 사용 권한을 갖기 위해 필요한 부분은
--privileged=true 와 /sbin/init 이다
나는 cuda 또한 사용하는 ubuntu container 였으므로 실행코드는 하기와 같다

sudo docker run -it -d --gpus all --name "name" imagename:tag /sbin/init

상기 코드로 sudo docker ps 를 통해 container 가 정상적으로 생성되었음을 확인했다.
container 에 진입해서 하기 코드를 통해 systemctl 사용 권한 또한 정상적으로 적용되었음을 확인했고,
cron 또한 정상적으로 동작하는 것을 확인했다.(물론 cron 의 실행 및 활성화 여부도 확인해야한다.)

sudo systemctl status cron

References

profile
JavaScript, Node.js, Express, React, React Native, GraphQL, Apollo, Prisma, MySQL

0개의 댓글