Docker

[Docker] 컨테이너에서 systemctl 사용 문제

먹세 2021. 9. 24. 14:10

컨테이너를 재시작 하게 되면 웹서버와 php-fpm 등 데몬을 계속 실행해주기 귀찮아서

systemctl enable로 서비스 등록을 하려고 하는데

 

Failed to connect to bus: No such file or directory

 

위와 같은 오류가 난다.

 

방법이 있긴 있어서 해봤다.

# 현재 컨테이너를 커밋해서 새로운 이미지 생성
$ docker commit container new_image

# --privileged 와 /sbin/init 으로 컨테이너를 생성해서 systemctl 접근권한을 준다.
# 기본적으로 docker는 systemctl 접근권한을 주지 않기 때문
$ docker run -it -d -p 80:80 --privileged --name new_conteiner new_image /sbin/init
# 이 상태로 localhost 접속하면 nginx 자동실행 되어있다.


# exec로 컨테이너 접속
$ docker exec -it new_container bash
$ systemctl status nginx

 

그런데 이 방법도 docker stop container 로 컨테이너를 정지시키고

다시 start 하면 이전과 동일하게 권한문제로 systemctl 사용이 불가.

데몬들도 자동으로 안뜨고..

 

그럼 컨테이너를 다시 시작할때는 무조건 수동으로 데몬들을 살려줘야 하는건가?

또는 컨테이너를 실행할때는 무조건 권한을 부여해서 --privileged 와 /sbin/init 으로 해야하나?

 

좋은방법을 찾는다면 내용 추가+++++++++++++++++++

 

우연히 발견..

--privileged 와 /sbin/init 옵션으로 생성한 컨테이너를 stop 시켰다가 다시 start 시키면

systemctl 접근을 못했는데

pc를 재부팅하고나서 컨테이너를 start 하면 된다..! ?? 뭐지..

 

혹시나해서 docker 자체를 모두 종료하고 다시 실행했는데도 안된다.

pc 재부팅할때만 되는데 이유가 뭔지 모르겠다.. (win10)

 

추가+++++++++++++++++++++++++++++++++++

 

굳이 재부팅 하기 귀찮아서 작업관리자에서 docker 서비스가 제대로 종료되지 않는것인지 찾아봤다.

docker 종료 후에도 살아있는 Docker.Service 도 작업관리자에서 종료해준 뒤 

다시 docker를 실행하면 PC 재부팅과 동일한 효과라서 최초로 컨테이너 start 시에는 systemctl이 실행 가능하니 참고.

ㅋㅋㅋ

반응형