posted by 귀염둥이채원 2018. 12. 27. 14:54

컨테이너에 postgresql을 설치하던 중 아래와 같은 에러가 발생했다.

$ /usr/pgsql-10/bin/postgresql-10-setup initdb

Failed to get D-Bus connection: Operation not permitted

failed to find PGDATA setting in postgresql-10.service


문제는 권한이 없는 (non-privileged) 컨테이너를 실행중이라고 한다.

systemd 의 경우 CAP_SYS_ADMIN capability가 필요하다.

도커는 보안을 위해 권한이 없는 컨테이너의 경우 capability 를 활성화 시키지 않는다.

또한 systemd는 컨테이너의 cgroup 파일 시스템에 RO(Read Only) 접근을 필요로 한다.

해결을 위해서는 "–v /sys/fs/cgroup:/sys/fs/cgroup:ro" 구문을 추가해야 한다.


# 문제

$ docker run -d --name centos7.4_postgres centos:7.4.1708 /bin/bash -c "while true; do echo hello world; sleep 1; done"


# 해결

$ docker run -d --name centos7.4_postgres --privileged -it -e container=docker -v /sys/fs/cgroup:/sys/fs/cgroup:ro centos:latest /usr/sbin/init


# 참고 사이트

https://serverfault.com/questions/824975/failed-to-get-d-bus-connection-operation-not-permitted

http://webkebi.zany.kr:9003/board/bView.asp?bCode=13&aCode=14170