docker pull rockylinux:8.9
docker ps -a
docker run --name pg15 -it -d -p 1122:22 5432:5432 rockylinux:8.9 bash
docker exec -it pg15 bash
(중략)
[root@204b0624983f /]# systemctl start postgresql-15
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'을 사용하려고 할 때 발생하는 에러는 주로 Docker 컨테이너가 기본적으로 시스템 서비스 관리자를 포함하지 않기 때문에 발생합니다. 일반적으로 Docker 컨테이너는 단일 프로세스를 실행하도록 설계되어 있으며, 'systemd'와 같은 서비스 관리자는 포함되지 않습니다. 'systemctl'은 'systemd'를 사용하여 시스템 서비스를 제어하는 명령어입니다. 따라서 'systemd'가 없는 환경에서는 'systemctl'이 작동하지 않습니다.
❓systemd는 뭘까?
현대 리눅스 배포판에서 사용되는 시스템 및 서비스 관리자입니다. 주요 명령어로는 'systemctl', 'journalctl', 'systemd-analyze' 등이 있습니다. 현대 리눅스 시스템에서 중요한 구성 요소로 자리잡고 있으며, 시스템 관리의 효율성과 유연성을 크게 향상시킵니다.
docker run --name pg15_1 -it -d -p 1122:22 --privileged=true --network pg-network pg_15_2 /sbin/init
📌 Key point
1. --privileged=true
2. /sbin/init
두 가지 옵션, 즉 'privileged=true'와 '/sbin/init'를 사용하면 이 문제를 해결할 수 있습니다. 이 두가지 옵션의 역할은 다음과 같습니다.