Failed to get D-Bus connection 에러 해결
컨테이너에 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