Computer >> 컴퓨터 >  >> 문제 해결 >> Linux

리눅스에서 'Docker 데몬에 연결할 수 없습니다(Cannot connect to the Docker daemon)' 오류 해결 방법

리눅스 터미널에서 "Cannot connect to the Docker daemon" 오류가 갑자기 나타나면 많은 분들이 당황하게 됩니다. 이 오류는 대부분 Docker 데몬이 이미 실행 중인 상태에서 발생하기 때문입니다. 물론 서비스가 정상적으로 구동 중인지 확인하는 것도 필요하지만, 실제로 이 오류는 서비스가 시작되지 않아서 생기는 문제가 아닌 경우가 대부분입니다. 가장 흔한 원인은 현재 사용자가 docker 그룹에 포함되어 있지 않기 때문입니다.

Docker는 리눅스 시스템에 별도의 사용자 그룹을 생성하며, 해당 그룹에 속하지 않은 사용자 계정은 데몬에 접근할 수 없습니다. 다만 한 가지 유의할 점이 있습니다. Docker 데몬은 항상 root 권한으로 실행되기 때문에, 사용자를 docker 그룹에 추가하는 것은 사실상 root와 동급의 권한을 부여하는 것과 같습니다. 단일 사용자 환경의 우분투 서버라면 큰 부담이 없겠지만, Arch, Fedora, Debian 등 여러 계정을 운영하는 환경이라면 보안 측면을 충분히 고려해야 합니다.

방법 1: Docker 서비스 상태 확인

먼저 Docker 서비스가 현재 실행 중인지부터 확인해야 합니다. 일반 사용자 권한으로 터미널을 열고 아래 명령어를 입력합니다.

systemctl status docker.service

정상이라면 Docker 데몬에 할당된 PID 번호를 비롯한 상태 정보가 출력됩니다. 만약 아무 정보도 나오지 않는다면 서비스가 중단된 것이므로 재시작이 필요합니다.

서비스를 재시작했다면, 앞서 오류가 발생했던 작업을 다시 시도해 보세요. 정상적으로 동작한다면 단순히 서비스가 꺼져 있었던 것뿐이므로, 왜 서비스가 중단됐는지만 파악하면 됩니다. 하지만 안타깝게도 대부분의 경우 이것만으로는 해결되지 않으므로, 그럴 때는 다음 방법으로 넘어가야 합니다.

방법 2: 사용자를 docker 그룹에 추가하기

명령줄에서 docker info를 실행해 보세요. 여전히 "Cannot connect to the Docker daemon" 오류가 출력된다면 그룹 권한 문제일 가능성이 높습니다. 이 경우 아래 명령어로 자신을 docker 그룹에 추가합니다.

sudo groupadd docker; sudo usermod -aG docker $USER

만약 usermod 명령어가 존재하지 않아 오류가 발생한다면, 다음과 같이 gpasswd를 활용할 수 있습니다.

sudo groupadd docker; sudo gpasswd -a $USER docker

다만 주요 배포판 대부분은 동일한 도구 세트를 사용하므로 이런 문제가 생길 가능성은 낮습니다. 어느 쪽이든 그룹 추가 후에는 아래 명령어로 새로운 docker 그룹에 로그인(적용)합니다.

newgrp docker

이 명령은 현재 로그인 중인 사용자에게 적용됩니다. 대부분의 시스템은 일반 사용자와 root 계정 외에는 여러 계정을 운영하지 않으므로 큰 문제가 되지 않습니다. 관리자 권한이 활성화된 상태에서 이어서 아래 명령어로 docker 소켓과 실행 파일의 그룹 소유권을 수정하세요.

sudo chgrp docker /usr/bin/docker; sudo chgrp docker /var/run/docker.sock

소켓 파일(/var/run/docker.sock)은 기본적으로 root 사용자만 소유하고 있는데, 위 명령을 실행하면 이전 단계에서 생성한 docker 그룹에 속하게 되므로 일반 사용자도 접근할 수 있게 됩니다.

설정 후에는 sudo 없이 docker가 동작하는지 반드시 확인해야 합니다. 일반 사용자 권한으로 아래 명령어를 입력해 다른 오류가 발생하지 않는지 점검하세요.

docker run hello-world

이 시점에서도 오류 메시지가 계속 나타나는 사용자는 극소수입니다. 대부분의 문제는 여기까지 진행하면 해결되지만, 그래도 문제가 지속된다면 완전히 로그아웃했다가 다시 로그인해 보세요. 새 터미널 창을 열어 확인해 보고, 그래도 해결되지 않으면 가능하다면 시스템 전체를 재부팅하는 것이 도움이 될 수 있습니다.

방법 3: ACL로 Docker 소켓 권한 설정하기

root와 동급 권한을 가진 그룹에 속하고 싶지 않다면, 소켓 파일에 특정 사용자만 접근할 수 있도록 ACL(Access Control List)을 설정하는 방법을 선택할 수 있습니다. 이 방법을 선호한다면 gpasswd 과정은 건너뛰어도 됩니다.

단점도 있습니다. 보안 감사를 수행할 때 파일 시스템 곳곳에 산재한 ACL 항목을 일일이 검토해야 하는 부담이 생길 수 있다는 점입니다. 하지만 docker 그룹을 아예 사용하지 않고도 원하는 사용자에게만 접근 권한을 줄 수 있다는 장점이 있습니다.

이 방식을 적용하려면 아래 명령어에서 user와 name 부분을 실제 사용자 이름으로 바꿔 실행합니다.

sudo setfacl -m user:name:rw /var/run/docker.sock

이렇게 하면 /var/run/docker.sock 소켓에 대한 읽기·쓰기 권한이 해당 사용자에게 부여되며, Debian 및 Ubuntu Server 환경에서 정상적으로 작동합니다.



저자 소개: 케빈 애로우즈(Kevin Arrows)

케빈 애로우즈는 10년 이상의 업계 경력을 지닌 베테랑 기술 전문가로, MCTS(Microsoft Certified Technology Specialist) 자격증을 보유하고 있습니다. 최신 기술 동향을 끊임없이 학습하는 것을 즐기며, 소프트웨어 개발, 사이버 보안, 클라우드 컴퓨팅 등 폭넓은 분야에서 방대한 양의 글을 집필해 왔습니다. 복잡한 기술 개념을 명확하고 간결하게 설명하는 능력으로 동료들에게 널리 인정받고 있습니다.