Docker에서 Centos7 systemd 에러

[Docker]Docker에서 Centos7 systemd 에러

도커에서 Centos7으로 컨테이너를 올려 systemctl 커맨드를 실행하면 에러가 발생한다.
컨테이너 실행
$ sudo docker -i -t —name centos-test centos /bin/bash
systemd를 실행
~/# systemctl status nginx
Failed to get D-Bus connection: No connection to service manager.
이번 포스팅에서는 상기 에러에 대해 다룰 예정이다.
우선 궁금한 해결법을 먼저 살펴보자.
  • 해결법
결론부터 말하자면 다른 방법으로 실행을 해야한다.(응용편(1) 참조)
$ sudo docker run -d —privileged —name centos-nginx centos /sbin/init
$ sudo docker exec -i -t centos-nginx /bin/bash
~/# systemctl status nginx
● nginx.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
nginx를 설치한 상태가 아니므로 상기의 메세지가 발생되나 에러는 해결되었다.
순정 Centos7의 베이스 이미지로 도커를 실행한 경우 SELinux가 On이므로 —privileged를 붙인다.
  • 원인
    • —privileged 옵션을 추가하는 것은 보안상의 이유로 컨테이너의 권한을 제한하기 위함이다.
      (SELinux의 권한을 넘어서는 안된다.)
    • SELinux가 off인 경우 docker 1.2.0 이후의 버전에 —cap-add 옵션이 추가되어 해당 옵션으로도 해결이 가능히다.
      $ sudo docker run —cap-add=SYS_ADMIN -d —name testcentos centos /sbin/init

댓글