본문 바로가기

Docker

[docker] failed to get D-Bus connection: Operation not permitted

systemctl list-units

Failed to get D-Bus connection: Operation not permitted

 

 

권한없는(non-privileged) 컨테이너를 실행중이라 생각됩니다. systemd 는 CAP_SYS_ADMIN capability 가 요구되는데, 도커는 보안을 위해 권한없는 컨테이너에서는 해당 capability 를 활성화 시키지 않습니다. 또한 systemd 는 컨테이너 내의 cgroup 파일 시스템에 대해 RO(read only) 접근을 필요로 합니다. 이는 "–v /sys/fs/cgroup:/sys/fs/cgroup:ro" 구문을 추가하여 해결할 수 있습니다.

 

docker run --privileged -it -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro centos:latest /usr/sbin/init

 

docker run 구문에 몇가지 군더더기가 붙어야 한다. (이 문제 해결을 위해 반드시 추가되어야 하는 옵션들이다) 1. --privileged 2. -v /sys/fs/cgroup:/sys/fs/cgroup:ro 3. /usr/sbin/init (init 명령어의 위치: 우분투의 경우 /sbin/init → 실제로는 systemd 이며 init,systemd 참고) 4. -e container=docker (서버폴트의 글 작성자 옵션에는 있는데 현 문제 해결과는 관계없는 옵션; 환경값 잡아주는 옵션) 물론 기존에 이미지 올릴 때 주던 -it 또는 -itd 와 같은 옵션은 기본적으로 줘야한다. CentOS / 우분투 둘다 동일 옵션(3번 옵션만 파일 위치가 OS 마다 다를 수 있다)으로 잘 되었다.