[Docker] Permission denied while trying to connect to the Docker daemon socket 에러 해결법

Hack hack 아바타

리눅스(Ubuntu, CentOS 등) 환경에 도커(Docker)를 설치한 후 docker psdocker run 등의 명령어를 실행할 때, 다음과 같은 권한 오류 메시지가 발생하는 경우가 있습니다.

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: ...

명령어 앞에 sudo를 붙이면 정상 작동하지만, 매번 관리자 권한을 요구하는 것은 번거로울 뿐만 아니라 보안상으로도 권장되지 않습니다. 이 글에서는 에러가 발생하는 구조적인 원인과 주의사항, 그리고 sudo 없이 도커 명령어를 실행하는 정석적인 해결 방법을 정리합니다.

1. 에러 발생 원인

도커 엔진의 핵심인 도커 데몬(Docker Daemon)은 시스템 자원을 제어하기 위해 언제나 시스템 최고 관리자 권한인 root 권한으로 백그라운드에서 실행됩니다.

사용자가 터미널에 도커 명령어를 입력하면, 이 명령어는 /var/run/docker.sock에 위치한 유닉스 소켓(Unix Socket) 파일을 통해 도커 데몬에 전달됩니다. 즉, 이 소켓 파일이 사용자와 도커 엔진을 연결하는 통로입니다.

리눅스 보안 정책상 이 소켓 파일은 root 사용자와 docker 권한 그룹만 접근할 수 있도록 제한되어 있습니다. 도커 설치 직후에는 일반 사용자 계정이 이 그룹에 포함되어 있지 않기 때문에 통로가 막혀 Permission denied(권한 거부) 오류가 발생합니다.

2. 단계별 해결 방법

현재 로그인한 사용자 계정을 도커 권한 그룹에 등록하여 문제를 해결할 수 있습니다. 터미널을 열고 아래 명령어를 순서대로 입력합니다.

1단계: 현재 계정을 docker 그룹에 추가

현재 로그인된 사용자 계정($USER)을 도커 권한 그룹에 추가합니다.

sudo usermod -aG docker $USER
  • usermod -aG: 기존에 사용자가 속해 있던 다른 그룹(예: sudo 등)을 유지한 채, 새로운 그룹만 추가(Append)하는 안전한 명령어입니다.

2단계: 변경 사항 즉시 적용

리눅스 시스템을 로그아웃하거나 재부팅하지 않고, 변경된 그룹 설정을 현재 터미널 창에 바로 반영합니다.

newgrp docker

상단의 본문 링크나 첨부된 터미널 에러 화면 이미지처럼, 설정을 마친 후에는 에러 메시지 대신 정상적인 출력 결과가 나타나야 합니다.

3. 예외 상황 및 추가 조치

공식 배포판이 아닌 커스텀 리눅스 환경이거나, Jenkins(젠킨스) 같은 외부 CI/CD 자동화 툴을 통해 도커 명령어를 실행할 때 위 설정만으로는 에러가 지속되는 예외 상황이 발생할 수 있습니다. 자동화 프로세스가 소켓 파일에 직접 접근할 권한이 부족하기 때문입니다.

이처럼 그룹 추가 후에도 동일한 권한 에러가 발생한다면, 아래 명령어로 소켓 파일 자체의 권한을 수동으로 수정해야 합니다.

sudo chmod 666 /var/run/docker.sock
  • 소유자, 그룹, 일반 사용자 모두에게 읽기/쓰기 권한을 부여하여 자동화 스크립트나 외부 툴이 도커 소켓 통로를 정상적으로 이용할 수 있도록 조치합니다.

⚠️ 설정 시 주의사항 및 보안 위험

일반 사용자 계정을 docker 그룹에 추가하는 것은 사실상 해당 계정에 시스템 root(최고 관리자) 권한을 부여하는 것과 동일한 보안 영향력을 가집니다. 도커 컨테이너는 호스트 시스템의 디렉토리를 제약 없이 마운트할 수 있기 때문입니다.

따라서 여러 사람이 공용으로 사용하는 호스트 서버이거나 외부 유저가 접근할 수 있는 계정인 경우, 무분별하게 도커 그룹 권한을 부여하면 시스템 전체가 해킹 위험에 노출될 수 있습니다. 반드시 신뢰할 수 있는 관리자 계정에만 이 설정을 적용해야 합니다.

4. 자주 묻는 질문 (FAQ)

Q. 이 작업은 서버를 켤 때마다 매번 해야 하나요?
아닙니다. usermod를 통한 그룹 등록은 운영체제 설정에 영구 반영되므로, 서버를 재부팅하거나 새로운 터미널 창을 열어도 sudo 없이 계속 사용 가능합니다.

Q. sudo로 그냥 실행하는 것과 그룹에 추가하는 것은 무엇이 다른가요?
매번 sudo docker로 실행하면 명령어 실행 결과로 생성되는 파일들의 소유권이 모두 root로 지정되어 나중에 파일을 수정하거나 지울 때 권한 문제가 2차로 발생합니다. 그룹 추가 방식이 개발 환경 구축에 훨씬 매끄럽습니다.

Q. 도커를 삭제한 후 다시 설치하면 이 설정을 또 해야 하나요?
아닙니다. 시스템에 생성된 docker 그룹과 사용자의 연결 정보는 도커 프로그램 삭제와 별개로 리눅스 계정 시스템(/etc/group)에 남아있으므로 재설정할 필요가 없습니다.

마치며

도커 소켓 권한 오류는 시스템의 권한 구조를 이해하면 원인과 해결책이 명확해지는 문제입니다. 안내해 드린 보안 주의사항을 숙지하시고, 환경에 맞는 올바른 권한 설정을 통해 효율적인 개발 환경을 구축하시기 바랍니다.


댓글 남기기

sys-hack에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기