Docker에서 centOS7 Failed to get D-Bus connection 에러 해결하기

2023. 1. 13. 14:34프로그래밍/Docker

systemctl을 입력하면 D-Bus connection 에러가 뜬다

Docker에서 centOS7을 사용할 일이 생겨서 설정을 하고 있는데 nginx를 설치하고 서비스 데몬을 실행하려는데

Failed to get D-Bus connection: Operation not permitted

Failed to get D-Bus connection: No such of file or directory

에러가 뜨는 것...

 

국내외 블로거 글과 스택, 깃의 힘을 빌려봐 해결하려 했으나 실패했다.

 

원래는 아래 docker run 인자에

run -d --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro /usr/sbin/init

privileged 옵션과 cgroup을 마운트 시킨 후 init을 시키는 방법으로 systemctl을 실행할 수 있다.

 

하지만 

Docker 4.2.x 버전 이후로 cgroups 설정이 변경이 되었던 것!

아마 해당 설정이 변경된 후로 cgroupsV1을 프로비저닝 할 때 Docker의 cgroups설정으로 systemd에 액세스 할 수 없게 된 게 아닐까 싶습니다.

그래서 exec로 접속 시 privileged 옵션을 줘도 systemctl명령이 안 먹히는 게 아니었을까?... 요?

 

해결법

Mac M1, Intel에서 정상적으로 작동합니다. (M2는 없어서 몰?루)

윈도우는 설정파일이 어디에 있는지 몰?루

centos:7
centos/systemd
두 이미지 모두 잘 됩니다.

우선 Docker settings.json 파일에서 deprecatedCgroupv1의 설정값을 확인해 보자

cat ~/Library/Group\ Containers/group.com.docker/settings.json | grep deprecatedCgroupv1

아무 설정을 하지 않았다면 false가 출력 될것..

그러면 settings.json파일에서 deprecatedCgroupv1의 설정값을 변경하자

vi ~/Library/Group\ Containers/group.com.docker/settings.json

해당 값을 true로 변경 후 cat

 

값을 변경했다면 도커를 재시작하기.

 

재시작 후 privileged와 -d옵션 그리고 init을 붙여 실행 후 systemctl status를 치면!

docker run --privileged -d --name centos7 -p 9999:80 -v /Users/kyaru/Desktop/dockervl:/data/windows --net nee centos/systemd init

마참내!!!

 

잘 된다!!

'프로그래밍 > Docker' 카테고리의 다른 글

도커로 나만의 웹 아카이브 저장소 만들기  (0) 2022.12.15
Mac에서 Docker 가지고 놀아보기 [1/2]  (0) 2022.03.08
Docker란?  (0) 2022.03.08