문제 발생

도커 설치 후 테스트를 위해 간단한 컨테이너를 내려받아서 실행시켜보았다.

$ docker run -it --rm ubuntu:16.04

에러와 함께 실행이 되지 않는다. 메시지는 아래와 같다.

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create: dial unix /var/run/docker.sock: connect: permission denied.

해결 방식의 이해

docker 관련 명령어를 사용하는 도커 데몬은 Unix 소켓을 통해 실행한다. 위의 에러에서도 볼 수 있는 var/run/docker.sock 파일이다. 해당 소켓 파일은 root 사용자의 소유권한으로 기본설정되어 있고, 이에 sudo 권한으로 실행되어야 한다. 이를 일반 사용자가 접근 할 수 있도록 docker 라는 그룹을 만들고 여기에 일반 사용자를 추가하여 해결한다.

즉 해당 문제의 해결 방식은 기존 sudo 권한으로 실행해야하는 docker 소켓을 일반 사용자가 사용할 수 있는 권한을 부여하는 과정이다.

현재 사용자 그룹 확인 및 추가

터미널에 다음과 같이 입력하여 현재 사용자의 속해있는 그룹을 확인한다. docker가 출력에 있는지 학인한다.

$ groups $계정명

‘docker’ 그룹 생성

docker 그룹을 생성해준다.

$ sudo groupadd docker

사용자를 docker 그룹에 추가한다 다음과 같이 추가한다.

$ sudo usermod -aG docker $계정명

해당 작업 후에는 터미널 세션을 종료 후 다시 연결하여 작업해야 한다. 로컬에서 작업하였다면 로그아웃했다가 다시 로그인하여 작업을 시도한다.

docker 소켓 파일 그룹과 권한 설정

만약 위의 작업들을 수행했음에도 같은 오류가 발생한다면 권장하지는 않지만 아래와 같은 방법들을 시도해 볼 수 있다.

소켓 파일 그룹 지정

$ sudo chown root:docker /var/run/docker.sock

소켓 파일 실행권한 변경

$ sudo chmod 666 /var/run/docker.sock

유효성 검사

sudo 권한 없이 docker 명령어를 사용할 수 있는지 테스트 해보기 위해 다음 커맨드를 입력하여 테스트해보자

$ docker run --rm hello-world

비슷하지만 다른 에러

혹시 아래와 같은 에러 출력 시 디렉토리의 권한 문제일 가능성이 있다.

WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied

이럴 때는 해당 디렉토리의 소유자 변경과 권한 변경을 통한 문제해결을 시도해본다

$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R

Leave a comment