본문 바로가기
개발/docker

docker centos systemctl 문제

by 가시죠 2021. 1. 18.
반응형

윈도우에 docker를 설치하고 centos를 설치한다.

# centos 이미지를 받는다.
docker pull centos

# centos이미지로 컨테이너를 등록/실행한다. 실행 후 /bin/bash를 실행한다. (즉, 쉘로 들어간다.)
docker run -i -t centos /bin/bash

 

centos bash에 접속하여 systemctl 실행 시 아래와 같은 오류가 발생할 수 있다.

[root@607577d0b861 /]# systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

 

해결방법

centos를 설치하고 처음 실행 시 옵션을 주어 아래와 같이 실행 시 systemctl을 정상적으로 실행 할 수 있다.

docker run --privileged -d --name centos centos /sbin/init

#-------------
# 옵션 설명
#-------------
# run : 실행한다.
# --privileged : 호스트의 모든 장치를 사용한다는 의미 (기본적으로 도커의 컨테이너는 보안상의 이유로 호스트 장치에 접근할수 없게 되어 있다.)
# -d : 백그라운드로 실행..
# --name centos : 컨테이너 이름은 centos로 지정
# centos : 이미지 이름
# /sbin/init : sbin/init를 실행

docker run --privileged -d --name centos centos /sbin/init

 

이후 컨테이너 내부 쉘로 접근 시

docker exec -it <컨테이너이름> bash

docker exec -it cenots bash

 

docker run -i -t centos /bin/bash 로 컨테이너를 생성할 경우 name은 임의로 지정된다. 생성된 컨테이너에서 세팅이나 작업을 진행했다고 가정하고.. 다시 옵션을 변경하여 기존 컨테이너를 띄울 순 없다.

이럴땐 commit 명령으로 이미지를 새로 만들고, 만든 이미지를 띄우는 방식으로 기존 컨테이너를 그대로 쓸 수 있다.

# 실행중인 도커 컨테이너를 조회
docker ps -a

# 새로 띄울 컨테이너를 commit 명령으로 이미지로 생성, 만약 실행중이라면 docker stop <컨테이너명> 으로 중지 후 실행
docker commit <기존컨테이너명> <신규이미지명>
ex) docker commit myCentos myNewCentos

# 이미지 목록을조회하여 신규 이미지가 있는지 확인
docker images

# 생성된 이미지로 컨테이너 생성
docker run --privileged -d --name <컨테이너명> <이미지명> /sbin/init
ex) docker run --privileged -d --name myNewCentosCon myNewCentos /sbin/init
반응형

'개발 > docker' 카테고리의 다른 글

docker 파일 복사 전송 가져오기  (0) 2022.08.22
docker 컨테이너에 root로 접속하기  (0) 2022.08.21
docker에서 mssql 설치  (0) 2022.08.21
docker-compose.yml  (0) 2021.01.18

댓글