Docker를 수정하는 방법 : 권한 거부 문제가 발생했습니다


300

우분투 OS가있는 컴퓨터에 Docker를 설치했습니다. 도커를 설치 한 후 실행하면

sudo docker run hello-world

괜찮습니다.하지만 sudo명령을 더 짧게하기 위해 단어 를 숨기고 싶습니다 .

단어없이 명령을 쓰면 sudo

docker run hello-world

다음이 표시됩니다.

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'.

내가 만들려고 할 때도 같은 일이 일어났다

docker-compose up

이 문제를 어떻게 해결할 수 있습니까?



답변:


437

root가 아닌 사용자로 docker를 실행하려면 docker 그룹에 docker를 추가해야합니다.

  1. 도커 그룹이 없으면 작성하십시오.
$ sudo groupadd docker
  1. docker 그룹에 사용자를 추가하십시오.
$ sudo usermod -aG docker $USER
  1. 다음 명령 또는 로그 아웃을 실행하고 다시 로그인 한 후 실행하십시오 (작동하지 않는 경우 먼저 시스템을 재부팅해야 할 수도 있음)
$ newgrp docker
  1. 도 커가 루트없이 실행될 수 있는지 확인하십시오.
$ docker run hello-world

docker 공식 문서에서 가져옵니다 : manage-docker-as-a-root-user


70
세 단계를 모두 실행 한 후에도이 문제가 계속 발생합니다. "(
Anand

78
우분투 18에서 재부팅해야 작동했습니다. 단순히 로그 아웃하고 다시 로그인해도 작동하지 않았습니다.
heez

26
@heez 재부팅이 필요하지 않았을 수도 있습니다. sudo systemctl restart docker
Rattle

5
docker그룹 에 속하면 정기적으로 sudo 정책 및 감사를 시행하지 않고도 루트 액세스 권한이 부여 됩니다. 자세한 내용과 토론 은 GitHub 문제 # 9976 을 참조하십시오.
raehik

13
다시 시작 고정 표시기 나를 위해 일을하지 않았다, 단지 (우분투 18.04)했다 재부트
조아킴 키가 큰

359

업그레이드 후 권한이 거부되었습니다. 사용자가 이미 'docker'그룹에 있었기 때문에 'mkb' 설치 후 단계를 수행해 도 아무런 변화가 없습니다. 나는 성공없이 어떤 식 으로든 두 번 재 시도합니다.

검색 시간 후에 다음 솔루션이 성공적으로 작동했습니다.

sudo chmod 666 /var/run/docker.sock

해결책은 Olshansk 에서 나왔습니다 .

업그레이드가 'docker'그룹에 대한 충분한 권한없이 소켓을 다시 만든 것처럼 보입니다.

문제

이 하드 chmod는 보안 허점을 열고 재부팅 할 때마다이 오류가 반복해서 시작되므로 매번 위의 명령을 다시 실행해야합니다. 나는 한 번에 해결책을 원한다. 이를 위해 두 가지 문제가 있습니다.

  • 1) 문제점SystemD : 소켓은 소유자 'root'와 그룹 'root'로만 작성됩니다.

    이 명령으로 첫 번째 문제를 확인할 수 있습니다.

    ls -l /lib/systemd/system/docker.socket
    

    이 모든 것이 좋으면 ' root/docker'not ' root/root' 가 표시되어야합니다 .

  • 2) 그래픽 로그인 문제 : /superuser/1348196/why-my-linux-account-only-belongs-to-one-group

    이 명령으로 두 번째 문제를 확인할 수 있습니다.

    groups
    

    모든 것이 정확하면 목록에 docker 그룹이 표시됩니다. 명령을 시도하지 않으면

    sudo su $USER  -c groups
    

    도커 그룹 이 보이면 버그 때문입니다.

솔루션

그래픽 로그인에 대한 해결 방법을 얻으려면 다음 작업을 수행해야합니다.

sudo chgrp docker /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

그러나이 버그를 관리 할 수 ​​없다면 그렇게 나쁘지 않은 해결책은 다음과 같습니다.

sudo chgrp $USER /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

이것은 그래픽 환경에 있고 컴퓨터의 유일한 사용자 일 수 있기 때문에 작동합니다. 두 경우 모두 재부팅해야합니다 (또는 sudo chmod 666 /var/run/docker.sock)


2
docker가 docs.docker.com/install에 doc에 따라 설치된 경우 그러한 명령을 처리 할 필요가 없습니다
Scott

4
@ Scott Stensland 나는 'doc에 따라'도커를 여러 번 설치했습니다. 문제는 알 수없는 다른 패키지와의 잘못된 상호 작용에서 비롯된 것 같습니다.
Galigator

1
고정 표시기 -에 - 고정 표시기, 나는 잘못없이 호스트에서 /var/run/docker.sock를 장착 한 :ro빨리 내가 갈 좋았 추가로 ... 마지막에
jakebrinkmann

2
EC2-AWS에서 우분투 18을 사용하고 제대로 작동했습니다. 다른 모든 (sudo usermod -aG docker $ USER 및 기타 물건)가 작동하지 않음
cherah30

1
감사합니다. 우분투 18.04 LTS에서 수정되었습니다. 하지 않았다 재 작성 및 groud에에 추가
Deepansh Parmani

32
  1. 도커 그룹 추가
$ sudo groupadd docker
  1. 도커 그룹에 현재 사용자 추가
$ sudo usermod -aG docker $USER
  1. 도커 그룹으로 세션 전환
$ newgrp - docker
  1. 테스트를 위해 예제를 실행하십시오
$ docker run hello-world

newgrp명령은 암호를 입력하라는 메시지가 내 사용자 암호를 수락하지 않았습니다. 대신 su - $USER로그 아웃 / 로그인을 피하기 위해 노력했습니다.
bluenote10

18
  1. docker그룹에 현재 사용자 추가
sudo usermod -aG docker $USER
  1. docker 데몬에 연결할 수 있도록 docker socket의 권한을 변경하십시오. /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

15

이 명령 으로이 오류를 해결합니다.

$ sudo chmod 666 /var/run/docker.sock

9

https://docs.docker.com/install/linux/linux-postinstall/docsManage Docker as a non-root user 에서 언제든지 단락을 시도 할 수 있습니다 .

문제가 지속되는 경우에도이 작업을 수행 한 후 다음 명령을 실행하여 문제를 해결할 수 있습니다.

sudo chmod 666 /var/run/docker.sock

2
도커 소켓을 모든 사람이 읽거나 쓸 수있게 만드는 chmod 666것은 보안상의 재난입니다 ... 이것은 절대 권장되지 않습니다.
Aayla Secura

6

unix : ///var/run/docker.sock에서 Docker 데몬 소켓에 연결하는 동안 권한이 거부 되었습니다 . /var/run/docker.sock : 연결 : 권한 거부

sudo chmod 666 /var/run/docker.sock

이것은 내 문제를 해결합니다.


2

이 문제를 해결하기 위해 도커와 도커 작성이 어디에 설치되어 있는지 검색했습니다. 내 경우 docker에 설치 /usr/bin/docker하고 docker-compose설치 한 /usr/local/bin/docker-compose경로. 그런 다음 터미널에 이것을 씁니다.

도커로 :

sudo chmod +x /usr/bin/docker

받는 사람 docker-compose:

sudo chmod +x /usr/local/bin/docker-compose

이제 명령에 도커 단어를 쓸 필요가 없습니다. sudo

/ ********************************************************** ********************** /

정오표:

이 문제의 가장 좋은 해결책은 @mkasberg에 의해 논평되었습니다. 나는 의견을 인용한다 :

That might work, you might run into issues down the road. Also, it's a security vulnerability. You'd be better off just adding yourself to the docker group, as the docs say. sudo groupadd docker, sudo usermod -aG docker $USER. Docs: https://docs.docker.com/install/linux/linux-postinstall/

고마워요!


2
그것은 효과가있을 수 있습니다, 당신은 길을 따라 문제가 발생할 수 있습니다. 또한 보안 취약점이기도합니다. docker문서에서 말한 것처럼 그룹에 자신을 추가하는 것이 좋습니다 . sudo groupadd docker, sudo usermod -aG docker $USER.
mkasberg

안녕하세요 @mkasberg! 귀하의 의견에 감사드립니다! 나는 당신의 해결책을 인용하기 위해 정오표를 만들었습니다. 고마워요!
Carlos Andres

1

lightdm과 kwallet은 로그인 할 때 보조 그룹을 통과하지 못하는 버그와 함께 제공됩니다. 이 문제를 해결하기 위해 나는 옆 sudo usermod -aG docker $USER에 주석을 달아야했습니다.

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

#auth optional pam_kwallet.so
#auth optional pam_kwallet5.so

/etc/pam.d/lightdm 재부팅하기 전에 실제로에 고정 표시기 그룹에 대한 효과가 있습니다.

버그 : https://bugs.launchpad.net/lightdm/+bug/1781418 및 여기 : https://bugzilla.redhat.com/show_bug.cgi?id=1581495



1

진심으로 여러분. 그룹에 Docker를 추가하거나 소켓 posix를 수정하지 마십시오 (SELinux를 강화하지 않고), 루트 privesc를 만드는 간단한 방법입니다. .bashrc에 별칭을 추가하면 간단하고 안전합니다 : alias dc = 'sudo docker'.


1

다음 단계를 수행하면 효과가 있습니다.

  1. 도커 그룹 만들기 sudo groupadd docker
  2. 이 그룹에 사용자를 추가하십시오 sudo usermod -aG docker $USER
  3. 이 명령을 실행하여 docker 그룹이 성공적으로 생성되도록 그룹을 나열하십시오. groups
  4. docker 그룹의 세션을 변경하려면 다음 명령을 실행하십시오. newgrp docker
  5. docker.sock 파일의 그룹 소유권을 변경하십시오.sudo chown root:docker /var/run/docker.sock
  6. .docker 디렉토리의 소유권 변경 sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  7. 드디어 sudo chmod g+rwx "$HOME/.docker" -R

그 테스트 후 당신은 실행할 수 있습니다 docker ps -a


재부팅이 필요없는 답변을 원했습니다. 이것이 유일한 대답이었습니다. "트릭"은 chowndocker.sock 파일입니다.
Potherca

1

docker를 설치하고 'docker'그룹을 만들고 사용자를 추가 한 후 docker service unit 파일을 편집하십시오.

sudo nano /usr/lib/systemd/system/docker.service

[서비스] 섹션에 두 줄을 추가하십시오.

SupplementaryGroups=docker    
ExecStartPost=/bin/chmod 666 /var/run/docker.sock

파일을 저장하십시오 (Ctrl-X, y, Enter).

Docker 서비스를 실행하고 활성화하십시오.

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker

0

Centos에서 Docker 설치 후. 아래 명령을 실행하는 동안 오류가 발생했습니다.

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.soc k/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

docker.socket에 대한 그룹 및 권한 변경

[centos@aiops-dev-cassandra3 ~]$ ls -l /lib/systemd/system/docker.socket
-rw-r--r--. 1 root root 197 Nov 13 07:25 /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chgrp docker /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chmod 666 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$ ls -lrth /var/run/docker.sock
srw-rw-rw-. 1 root docker 0 Nov 20 11:59 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$

아래 docker 명령을 사용하여 확인

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[centos@aiops-dev-cassandra3 ~]$

-4

sudo chmod 666 /var/run/docker.sock

도커에 로그인해도 오류가 발생하는 동안 도움이되었지만 이제는 내 시스템에서 완벽하게 작동합니다.


1
이 방법을 사용하는 것은 매우 안전하지 않습니다. 주요 질문의 의견에 제공된 설치 후 지침을 검토하십시오.
Alejandro Visiedo García
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.