데몬이 실행 중일 때 "Docker 데몬에 연결할 수 없습니다"라는 메시지가 나타나는 이유는 무엇입니까?

데몬이 실행 중일 때 "Docker 데몬에 연결할 수 없습니다"라는 메시지가 나타나는 이유는 무엇입니까?

Docker 서비스가 분명히 실행 중입니다.

$ systemctl status docker.service 
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2015-12-28 19:20:50 GMT; 3 days ago
     Docs: https://docs.docker.com
 Main PID: 1015 (docker)
   CGroup: /system.slice/docker.service
           └─1015 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
$ ps wuf -u root | grep $(which docker)
root      1015  0.0  0.3 477048 12432 ?        Ssl   2015   2:26 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs

그러나 Docker 자체는 Docker와의 대화를 거부합니다.

$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

나는 뛰고있어기본 도커 구성/etc즉, 이 서비스와 관련된 파일을 변경하지 않았습니다 .

여기서 무엇이 잘못되었을 수 있습니까?

답변1

이 질문은 이미 답변되었지만 여기에 추가 정보가 있습니다.

Arch를 사용하든 Fedora나 Ubuntu와 같은 다른 배포판을 사용하든 Docker는 소켓 파일을 사용하여 통신합니다. 명령을 실행하면 docker이 소켓을 사용하여 Docker 데몬과 통신합니다. 물론 데몬은 실행 중이어야 하지만(보통 기본적으로 비활성화되어 있음) 사용자가 소켓에 액세스할 수 없으면 데몬과도 통신할 수 없습니다.

먼저 배포 저장소에서 Docker를 설치해야 합니다. 설치 스크립트를 다운로드해서 쉘( curl ... | sh)에 파이프하는 사람도 있지만 쉽게 업데이트할 수 있도록 저장소에서 설치하는 것이 좋습니다.

아치:

# pacman -S docker

페도라:

# dnf install docker

위에서 언급한 것처럼 데몬은 기본적으로 비활성화되어 있을 수 있습니다. Docker를 사용하려면 데몬이 실행 중이어야 합니다.

활성화합니다(부팅 시 시작됩니다).

# systemctl enable docker

지금 시작(또는 다시 시작):

# systemctl start docker

Docker 소켓은 이제 기본적으로 루트가 소유합니다(docker 그룹이 없는 경우).

# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock

이것이 일반 사용자가 docker 데몬과 대화할 수 없는 이유입니다. 일반 사용자에게는 소켓에 액세스할 수 있는 권한이 없습니다. 데몬에 액세스할 수 없으므로 데몬이 실행되고 있지 않다고 가정하고 다음 오류를 표시합니다.Cannot connect to the Docker daemon. Is the docker daemon running on this host?

이것이 많은 사람들이 sudo.

docker이상적으로는 Docker를 설치하면 이름이 지정된 그룹이 생성됩니다. 그러나 데몬이 시작될 때 그룹이 존재하지 않으면 소켓 파일은 루트가 소유합니다.

어떤 경우에는 그룹이 다른 이름을 가졌던 경우도 있었습니다.dockerroot페도라에. grep docker /etc/group시스템에 그러한 그룹이 있는지 확인하십시오 . 이미 이 그룹을 사용하고 있는 경우(사용자가 그룹에 속해 있음) 이를 사용하도록 Docker를 구성해야 합니다.

/etc/sysconfig/docker다음을 추가합니다 -G dockerroot(참고: 이는 해결 방법이지 최선의 해결 방법은 아닙니다).

OPTIONS='--selinux-enabled -G dockerroot'

데몬을 다시 시작하면 사용자가 소켓에 액세스할 수 있습니다.

# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock

그렇지 않은 경우 공식적인 방법은 이름이 지정된 그룹을 사용하는 것입니다 docker. 존재하는 경우 Docker는 이를 자동으로 사용합니다. 즉, 소켓 그룹을 이 그룹으로 설정합니다. 존재하지 않는 경우 이를 생성하고 데몬을 다시 시작하기만 하면 됩니다.

# groupadd docker
# systemctl restart docker

소켓 파일은 다음 그룹이 소유합니다.

# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock

docker소켓에 액세스하려면 사용자가 이 그룹에 속해야 합니다 .

# usermod -aG docker (user)

그룹에 있는지 확인하려면 로그아웃했다가 다시 로그인(또는 su - (user)실행) 해야 할 수도 있습니다 .id

그런 다음 sudo/root 없이 Docker를 사용할 수 있습니다.

$ docker version --format '{{.Server.Version}}'
1.9.1

마지막으로 경고의 말씀을 드립니다.신뢰할 수 있는 사용자만 Docker 데몬을 제어할 수 있어야 합니다.. 바라보다https://docs.docker.com/engine/security/security/.
(물론 sudo도 마찬가지입니다. 신뢰할 수 있는 사용자만 wheel그룹에 있어야 합니다.)

답변2

당신은해야합니다docker그룹 에 자신을 추가하세요명령을 newgrp docker실행하려면 로그아웃했다가 다시 로그인하거나 를 실행하여 그룹을 활성화하세요 . docker오류 메시지는 단순히 오해의 소지가 있습니다.

답변3

내 Linux 시스템에서 이 문제를 해결하기 위해 조사한 후 이 답변을 작성해야겠다고 생각했습니다. 문제를 해결하기 위해 제가 한 일은 다음과 같습니다.

페도라 22에서

도커를 설치합니다:

$> curl -fsSL https://get.docker.com/ | sh

Docker를 설치한 후:

사용자를 docker 그룹에 추가해야 합니다.

$> sudo usermod -aG docker

도커 데몬을 시작해야 합니다

$> sudo service docker start

부팅 시 데몬이 시작되도록 설정할 수 있습니다.

$> sudo chkconfig docker on

docker 서비스가 실행되고 있는지 확인할 수 있습니다.

$> service docker status

마지막 확인

$> docker run hello-world

답변4

이 명령은 나에게 효과적이었습니다.

sudo grep dwalsh /etc/sudoers

alias docker="sudo /usr/bin/docker"

더 많은 문서가 필요하면 이 페이지에서 해결책을 찾았습니다. 루트가 아닌 사용자가 CentOS, Fedora 또는 RHEL에서 Docker를 실행하는 것을 허용하지 않는 이유

관련 정보