[Docker] permission denied while trying to connect to the Docker daemon socket at unix 에러 해결

안나·2024년 11월 6일
1

DevOps

목록 보기
21/21
post-thumbnail

Docker를 컨테이너에서 실행하거나, 호스트의 Docker 소켓(/var/run/docker.sock)을 컨테이너에 마운트하여 사용하는 경우, 예상치 못한 권한 문제로 인해 Docker 명령이 작동하지 않을 때가 있습니다. 이 글에서는 Docker 소켓 접근 권한 문제를 해결하는 방법을 단계별로 안내합니다.


1. 증상


[runner@ae8762224dd7 /]$ docker ps
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json": dial unix /var/run/docker.sock: connect: permission denied

Docker가 설치된 것 같지만, docker 명령이 제대로 실행되지 않는 경우가 있습니다. 이 문제는 주로 Docker 소켓 파일(/var/run/docker.sock)의 소유권 문제로 발생합니다.

2. 원인

Docker 데몬은 Unix 소켓을 통해 명령을 수신하며, /var/run/docker.sock 파일에 대해 읽기 및 쓰기 권한을 가진 사용자나 그룹만 Docker 명령을 사용할 수 있습니다. 이 소켓 파일은 기본적으로 docker 그룹에 속한 사용자만 접근할 수 있도록 설정되어 있습니다. 따라서, 소켓 파일에 접근하려는 사용자가 docker 그룹에 속해 있지 않다면 Docker 명령이 작동하지 않습니다.

3. 해결 방법

1) Docker 소켓의 소유 계정과 그룹 확인

우선, /var/run/docker.sock의 소유자와 그룹을 확인합니다.

ls -l /var/run/docker.sock

출력 예시는 다음과 같을 수 있습니다:


srw-rw---- 1 docker docker 0 Nov  4 12:00 /var/run/docker.sock

여기서 docker:docker는 소켓 파일의 소유자와 소유 그룹입니다. 즉, Docker 소켓에 접근하려면 docker 그룹에 속해 있어야 합니다.

2) 사용자 추가 및 그룹 변경

Docker 소켓 파일을 사용하려는 계정이 docker 그룹에 속해 있지 않다면, 동일한 그룹을 가진 계정을 생성하거나, 현재 계정을 docker 그룹에 추가합니다.

예를 들어, 소켓 파일의 소유주가 docker:docker라면, 다음 명령어로 docker 사용자 계정을 만들고 전환하여 문제를 해결할 수 있습니다.

3) 현재 사용자에게 docker 그룹 추가

만약 현재 사용 중인 계정으로 Docker에 접근하고 싶다면, 현재 계정을 docker 그룹에 추가합니다.

# 현재 계정이 docker 그룹에 속해 있도록 설정합니다.
usermod -aG docker $(whoami)

그룹 설정을 변경한 후에는 로그아웃했다가 다시 로그인하거나, newgrp docker 명령을 사용하여 변경 사항을 적용합니다.

4) Docker 실행 확인

설정이 완료되면 docker 명령어가 정상적으로 작동하는지 확인합니다.

docker --version

정상적으로 Docker 버전 정보가 출력되면 설정이 완료된 것입니다.


정리

  • Docker 소켓 파일(/var/run/docker.sock)의 소유자와 소유 그룹을 확인합니다.
  • 필요한 경우 docker 그룹과 동일한 계정을 생성하거나 현재 계정을 docker 그룹에 추가하여 권한 문제를 해결합니다.
  • 그룹 변경 후 Docker 명령이 작동하는지 확인합니다.

위의 단계를 따라 권한 문제를 해결하면 Docker 명령을 정상적으로 사용할 수 있을 것입니다.

0개의 댓글