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를 실행하는 것을 허용하지 않는 이유