Docker를 컨테이너에서 실행하거나, 호스트의 Docker 소켓(/var/run/docker.sock
)을 컨테이너에 마운트하여 사용하는 경우, 예상치 못한 권한 문제로 인해 Docker 명령이 작동하지 않을 때가 있습니다. 이 글에서는 Docker 소켓 접근 권한 문제를 해결하는 방법을 단계별로 안내합니다.
[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
)의 소유권 문제로 발생합니다.
Docker 데몬은 Unix 소켓을 통해 명령을 수신하며, /var/run/docker.sock
파일에 대해 읽기 및 쓰기 권한을 가진 사용자나 그룹만 Docker 명령을 사용할 수 있습니다. 이 소켓 파일은 기본적으로 docker
그룹에 속한 사용자만 접근할 수 있도록 설정되어 있습니다. 따라서, 소켓 파일에 접근하려는 사용자가 docker
그룹에 속해 있지 않다면 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
그룹에 속해 있어야 합니다.
Docker 소켓 파일을 사용하려는 계정이 docker
그룹에 속해 있지 않다면, 동일한 그룹을 가진 계정을 생성하거나, 현재 계정을 docker
그룹에 추가합니다.
예를 들어, 소켓 파일의 소유주가 docker:docker
라면, 다음 명령어로 docker
사용자 계정을 만들고 전환하여 문제를 해결할 수 있습니다.
만약 현재 사용 중인 계정으로 Docker에 접근하고 싶다면, 현재 계정을 docker
그룹에 추가합니다.
# 현재 계정이 docker 그룹에 속해 있도록 설정합니다.
usermod -aG docker $(whoami)
그룹 설정을 변경한 후에는 로그아웃했다가 다시 로그인하거나, newgrp docker
명령을 사용하여 변경 사항을 적용합니다.
설정이 완료되면 docker
명령어가 정상적으로 작동하는지 확인합니다.
docker --version
정상적으로 Docker 버전 정보가 출력되면 설정이 완료된 것입니다.
/var/run/docker.sock
)의 소유자와 소유 그룹을 확인합니다.docker
그룹과 동일한 계정을 생성하거나 현재 계정을 docker
그룹에 추가하여 권한 문제를 해결합니다.위의 단계를 따라 권한 문제를 해결하면 Docker 명령을 정상적으로 사용할 수 있을 것입니다.