“Docker 데몬에 연결할 수 없음” 오류를 해결하는 방법

0
444

“Docker 데몬에 연결할 수 없음” 오류를 해결하는 방법

Docker는 소프트웨어 컨테이너를 구축하고 실행하기 위한 최고의 플랫폼 중 하나입니다. Swarm 모드의 단일 호스트 또는 여러 분산 노드에서 컨테이너를 사용하는 데 필요한 모든 것이 함께 제공됩니다.

Docker에는 데몬 기반 아키텍처가 있습니다. 컨테이너 생성 및 시작을 담당하는 소프트웨어는 명령을 수락하는 CLI 프로세스와 무관합니다. 즉, 활성 데몬 연결 없이 명령을 실행하려고 하면 CLI에 오류가 표시됩니다. 이 문서에서는 이러한 답답한 메시지를 해결하기 위한 몇 가지 방법을 공유합니다.

문제 증상

Docker CLI는 사용 가능한 데몬 연결에 의존합니다. API 호출을 사용하여 데몬과 상호 작용합니다. 구성된 데몬에 액세스할 수 없는 경우 docker 다음과 같은 명령 docker ps, docker run그리고 docker build 다음과 유사한 오류 메시지가 표시됩니다.

$ docker run hello-world:latest
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
Is the docker daemon running?

이것은 CLI가 다음을 사용하여 Docker 데몬과 통신하려고 시도했음을 나타냅니다. /var/run/docker.sock 유닉스 소켓. 소켓이 열려 있지 않아 연결에 실패했습니다.

1. Docker Daemon 서비스가 실행 중인지 확인

Docker 데몬은 일반적으로 호스트가 재부팅된 후 Docker를 자동으로 시작하는 systemd 서비스에 의해 관리됩니다. 이 서비스가 실행 중인지 확인하여 문제 해결을 시작할 수 있습니다.

$ sudo systemctl status docker
docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: inactive (dead)

서비스는 보고해야 합니다. Active: active (running) 데몬이 실행 중인 경우. 위의 예는 inactive (dead) 이는 데몬이 중지되었음을 의미합니다.

다음 명령을 사용하여 Docker를 시작합니다.

$ sudo systemctl start docker

이제 당신은 실행할 수 있어야합니다 docker CLI 명령이 성공했습니다.

시스템을 재부팅한 후 Docker가 중지된 상태로 유지되는 것을 확인할 수 있습니다. 서비스를 활성화하여 systemd가 자동으로 시작할 수 있도록 하여 이 문제를 해결할 수 있습니다.

$ sudo systemctl enable docker
$ sudo systemctl daemon-reload

그만큼 daemon-reload 명령은 변경 사항을 적용하기 위해 구성을 다시 로드하도록 systemd에 지시합니다.

2. 수동으로 데몬 시작

Docker 서비스가 설치되지 않은 시스템을 사용하는 경우가 있습니다. 다음을 사용하여 Docker 데몬을 수동으로 시작할 수 있습니다. dockerd 명령. 이것은 일반적으로 다음과 같이 실행해야 합니다. root.

$ sudo dockerd
INFO[2022-06-29T15:12:49.303428726+01:00] Starting up

Docker는 명령이 실행되는 동안 계속 액세스할 수 있습니다. Ctrl+C를 사용하여 데몬을 중지합니다.

3. CLI가 올바른 데몬을 대상으로 하는지 확인

CLI가 원격 Docker 데몬 인스턴스에 연결하려고 할 때 문제가 발생할 수 있습니다. 이것은 일반적으로 오류 메시지에 TCP 주소가 표시될 때 발생합니다.

$ docker run hello-world:latest
Cannot connect to the Docker daemon at tcp:///0.0.0.0:2375

이 예에서 docker CLI가 다음에서 Docker 데몬에 연결하려고 합니다. 0.0.0.0:2375 로컬 Unix Docker 소켓 대신 TCP를 사용합니다. Docker 데몬의 TCP 지원이 비활성화되어 있거나 네트워크에서 지정된 호스트에 액세스할 수 없는 경우 실패합니다.

일반적으로 사용하려는 데몬 연결에 대한 올바른 Docker CLI 컨텍스트로 전환하여 이 문제를 해결할 수 있습니다.

$ docker context use default

사용 가능한 모든 컨텍스트와 컨텍스트가 연결하는 데몬 끝점을 나열할 수 있습니다. context ls 명령:

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT             
default *   Current DOCKER_HOST based configuration   unix:///var/run/docker.sock

현재 선택된 컨텍스트는 별표로 강조 표시됩니다.

예상치 못한 값 DOCKER ENDPOINT 열은 일반적으로 다음으로 인해 발생합니다. DOCKER_HOST 환경 변수가 설정되고 있습니다. 다음과 같은 경우 경고가 표시됩니다.

$ export DOCKER_HOST=1.2.3.4
$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT
default *   Current DOCKER_HOST based configuration   tcp://1.2.3.4:2375
Warning: DOCKER_HOST environment variable overrides the active context. To use a context, either set the global --context flag, or unset DOCKER_HOST environment variable.

존재 DOCKER_HOST 셸의 환경 변수는 선택한 컨텍스트에서 정의한 끝점을 재정의합니다. 이 예에서는 docker 명령은 항상 데몬 인스턴스를 대상으로 합니다. tcp://1.2.3.4:2375.

이 문제는 다음을 지우면 해결할 수 있습니다. DOCKER_HOST 변하기 쉬운:

$ export DOCKER_HOST=

Docker는 이제 활성 컨텍스트에 의해 구성된 엔드포인트를 사용합니다. 이것은 기본 로컬 Unix 소켓이 됩니다. /var/run/docker.sock 사용자 정의 컨텍스트를 수동으로 설정하지 않는 한.

$ docker context ls
NAME        DESCRIPTION                               DOCKER ENDPOINT             
default *   Current DOCKER_HOST based configuration   unix:///var/run/docker.sock

4. 권한 문제

Docker 소켓에 대한 잘못된 사용자 권한은 데몬 연결 문제의 또 다른 일반적인 원인입니다. 이러한 종류의 문제는 일반적으로 약간 다른 오류 메시지를 표시합니다.

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

이것은 Unix 사용자 계정에 Docker API를 노출하는 소켓과 상호 작용할 수 있는 권한이 없을 때 발생합니다. 자신을 추가하기 docker group은 이 문제를 해결하는 가장 좋은 방법입니다.

$ sudo usermod -aG docker $USER

이 변경 사항을 적용하려면 새 셸 창을 열거나 로그아웃했다가 다시 로그인해야 합니다. 이제 실행할 수 있어야 합니다. docker 권한 문제가 발생하지 않고 명령.

요약

Docker CLI가 현재 구성을 사용하여 Docker 데몬 인스턴스와 통신할 수 없을 때 “Cannot connect to the Docker daemon”이 나타납니다. 이는 종종 Docker 데몬 서비스가 중지되었거나 비활성화되었기 때문입니다. 오프라인 상태가 된 원격 Docker 호스트에 연결을 시도할 수도 있습니다.

이제 이 문제의 가능한 원인과 일반적인 해결 방법을 알고 있어야 합니다. Docker 데몬 설정을 확인하고 Docker 서비스를 다시 시작하고 사용자 계정에 Docker 소켓과 상호 작용할 수 있는 권한이 있는지 확인하여 오류를 해결하십시오.