본문 바로가기
프로그래밍/도커(Docker)

Docker 컨테이너에서 systemd 실행하기

by bantomak 2024. 12. 24.
반응형

Docker 컨테이너에서 systemd 실행하기

기본적으로 Docker로 실행한 Ubuntu는 init 시스템이 없으며, systemd를 사용하지 않는다. 이는 Ubuntu 컨테이너가 주로 단일 프로세스를 실행하도록 설계되어 있기 때문이다. Docker 컨테이너는 단일 프로세스로 동작하는 것이 이상적이며, 여러 서비스를 동시에 관리하기 위해 컨테이너를 여러 개 실행하는 것이 일반적이다.

Docker 컨테이너에 systemd 설치 시도하기

// 컨테이너에 root 계정으로 접근
$ docker exec -it --user root <container-name> /bin/bash

$ apt-get update

// systemctl 설치
$ apt-get install systemd

// systemctl status 실행
$ systemctl status
  • docker exec는 실행 중인 컨테이너에서 새로운 명령을 실행한다.
  • -it는 컨테이너에 대화형 터미널을 연결한다.
  • /bin/bash는 컨테이너 내에서 실행될 명령이 BashShell 임을 지정한다.

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

 

해당 에러 메시지가 뜨면서 systemctl 명령어가 실행되지 않는다. 위에서 설명했다시피 도커 컨테이너는 단일 프로세스로 동작하는 것을 기반으로 설계되었기 때문에 systemctl 명령어가 정상적으로 뜨기 위해서는 추가적인 작업이 필요하다.

git 설치 이후에 스크립트 실행

$ apt update && apt install sudo git -y

$ git clone https://github.com/DamionGans/ubuntu-wsl2-systemd-script.git && cd ubuntu-wsl2-systemd-script && sudo bash ubuntu-wsl2-systemd-script.sh --force

// 터미널 종료
$ exit

$ docker exec -it --user root graylog /bin/bash

// 컨테이너 재시작
$ docker restart <container-name>

$ systemctl status

도커 컨테이너에서 systemctl status를 실행했다.

정리하자면

궁금증을 해결하기 위해서 인터넷을 잔뜩 뒤져서 방법을 찾아냈지만... 굳이 도커 환경에서 systemd를 쓸일이 있을까하는 생각이 든다. 하나의 컨테이너에는 하나의 프로세스만 실행시키고 여러 프로세스를 실행하고 싶을때는 docker-compose를 이용해서 여러 컨테이너들을 묶어서 사용하도록 하자.

함께 읽으면 좋은 글

 

도커 데스크톱(Docker desktop) 설치하고 실행해보자

도커 데스크톱(Docker desktop) 설치하기 가장 최근에 나온 도커 설치 도구는 도커 데스크톱(Docker desktop)이다. 사용하기 편하고 UI가 이쁘다. 하지만 아래의 사양을 요구한다. 참고하도록 하자. 윈도

jettstream.tistory.com

참고 사이트

 

12주차 서버프로그래밍

docker에 systemd 설치하기

medium.com

댓글