programing

도커 수정 방법: 권한 거부 문제를 받았습니다.

coolbiz 2023. 7. 29. 12:59
반응형

도커 수정 방법: 권한 거부 문제를 받았습니다.

Ubuntu 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

어떻게 해결할 수 있습니까?

루트가 아닌 사용자로 도커를 실행하려면 도커 그룹에 추가해야 합니다.

  1. 도커 그룹이 존재하지 않는 경우)
$ sudo groupadd docker
  1. 사용자를 도커 그룹에 추가합니다.
$ sudo usermod -aG docker $USER
  1. 새에로에 합니다.docker다시 해야 하는 하십시오.): group("group"/"group"):
$ newgrp docker
  1. 루트 없이 도커를 실행할 수 있는지 확인합니다.
$ docker run hello-world

그래도 오류가 발생하면 재부팅합니다.

$ reboot

경고문

도커 그룹은 루트 사용자와 동등한 권한을 부여합니다.이것이 시스템의 보안에 미치는 영향에 대한 자세한 내용은 Docker Daemon Attack Surface를 참조하십시오.

도커 공식 문서에서 가져온 것: 비루트 사용자로 관리 도커

업그레이드 후 권한이 거부되었습니다.사용자가 이미 '도커' 그룹에 속해 있었기 때문에 'mkb' 설치 후 단계를 수행해도 변경 사항이 없습니다. 성공하지 못하고 두 번 다시 시도합니다.

검색 시간 후에 다음 솔루션이 마침내 작동했습니다.

sudo chmod 666 /var/run/docker.sock

해결책은 올샨스크에서 왔습니다.

업그레이드가 '도커' 그룹에 대한 충분한 권한 없이 소켓을 다시 생성한 것 같습니다.

문제

하드 chmod는 보안 구멍을 열고 재부팅할 때마다 이 오류가 반복적으로 시작되고 매번 위의 명령을 다시 실행해야 합니다.나는 완전히 해결책을 원합니다.이를 위해 두 가지 문제가 있습니다.

  • 문제: 소켓은 소유자 'root' 및 그룹 'root'으로만 생성됩니다.

    다음 명령을 사용하여 이 첫 번째 문제를 확인할 수 있습니다.

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

    이 모든 것이 좋다면, 당신은 봐야 합니다.root/docker'이 아닌root/root'.

  • 그래픽 로그인 문제: https://superuser.com/questions/1348196/why-my-linux-account-only-belongs-to-one-group

    다음 명령을 사용하여 두 번째 문제를 확인할 수 있습니다.

    groups
    

    모든 것이 올바르면 목록에 도커 그룹이 표시됩니다.그렇지 않은 경우 명령을 시도합니다.

    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

사용자가 그래픽 환경에 있고 컴퓨터의 유일한 사용자이기 때문에 이 작업이 가능합니다.두 경우 모두 재부팅(또는 )이 필요합니다.

  1. 도커 그룹 추가
$ sudo groupadd docker
  1. 도커 그룹에 현재 사용자 추가
$ sudo usermod -aG docker $USER
  1. 도커 그룹으로 세션 전환
$ newgrp - docker
  1. 테스트할 예제 실행
$ docker run hello-world
  1. docker
sudo usermod -aG docker $USER
  1. 을 도커 데몬에 할 수 합니다. 도커 소켓의 권한을 변경합니다./var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

다음 명령을 사용하여 이 오류를 해결합니다.

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

도커 그룹을 만들고 이 그룹에 사용자를 추가해도 작동하지 않는 경우(앞의 답변에서 설명한 최선의 솔루션), 두 번째 방법이 있습니다.

sudo chown $USER /var/run/docker.sock 

그것이 하는 일은 소유권을 바꾸는 것입니다.docker.sock파일을 사용자에게 보냅니다.

참고: 사용하는 것은 정말 좋지 않은 방법입니다.chmod 666왜냐하면 그것은 실질적으로 모든 사람들에게 접근하고 수정할 수 있는 권한을 주기 때문입니다.docker.sockjava.

양말 파일의 권한만 변경하면 됩니다.

sudo chmod 666 /var/run/docker.sock

이것은 확실히 효과가 있을 것입니다.

도커 문제 수정: (권한 거부)

  • 하지 않는 : 도커그없경다생성합니다을음우.sudo groupadd docker
  • 시스템의 수 : 사용가시슈사퍼용수확자인의:grep -Po '^sudo.+:\K.*$' /etc/group
  • : Linux 파일:export USER=demoUser
  • 를 추가합니다.sudo usermod -aG docker $USER
  • / Login : 다로명령또실/다그인로을니행합웃아.newgrp docker
  • 도커가 정상적으로 실행되는지 확인합니다.docker run hello-world
  • 합니다.reboot

작동하지 않으면 다음 명령을 실행합니다.

sudo chmod 660 /var/run/docker.sock

당신은 언제든지 시도할 수 있습니다.Manage Docker as a non-root userhttps://docs.docker.com/install/linux/linux-postinstall/ 문서의 단락.

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

sudo chmod 666 /var/run/docker.sock

우리는 항상 잊어버립니다.ACLs참조.


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

unix://var/run/docker.sock: http://%2Fvar%2Fun%2Fdocker.sock/v1.40/images/json: dial unix/var/run/docker의 Docker 데몬 소켓에 연결하는 동안 사용 권한이 거부되었습니다.양말: 연결: 권한이 거부되었습니다.

sudo chmod 666 /var/run/docker.sock

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

그 문제를 해결하기 위해 저는 제 도커와 도커 컴포지트가 설치된 곳을 검색했습니다.저 같은 경우에는.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

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

ERRATA:

이 문제에 대한 최고의 해결책은 @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/

ubuntu 21.04 systemd 소켓 소유권

서문을 쓰겠습니다. 이 솔루션은 지역 개발 중에 저에게 완벽하게 적합한 솔루션이었고 저는 여기서 이 솔루션을 찾고 있었습니다.ubuntu docker permission error그래서 저는 이것을 그냥 여기에 두겠습니다.

나는 유닉스 소켓을 가지고 있지 않아서, 그것을 씹었습니다.

sudo chown $(whoami):$(whoami) /var/run/docker.sock

개발 환경을 위한 또 다른 영구적인 솔루션은 유닉스 소켓 생성의 사용자 소유권을 수정하는 것입니다.이렇게 하면 사용자에게 소유권이 주어지므로 다시 시작할 때마다 유지됩니다.

sudo nano /etc/systemd/system/sockets.target.wants/docker.socket

docker.docker:

[Unit]
Description=Docker Socket for the API

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=YOUR_USERNAME_HERE
SocketGroup=docker

[Install]
WantedBy=sockets.target

진짜 여러분.그룹에 도커를 추가하거나 소켓 posix를 수정하지 마십시오(강화 SELinux 없이). 루트 privesc를 만드는 간단한 방법입니다.에 별칭을 추가하기만 하면 됩니다..bashrc다음과 같이 더 간단하고 안전합니다.alias dc='sudo docker'.

은 로그인시 버그와 됩니다. 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

이 작업은 다음과 같습니다.

컨테이너 내부로 들어가 파일의 ACL을 수정합니다.

sudo usermod -aG docker $USER
sudo setfacl --modify user:$USER:rw /var/run/docker.sock

chmod를 사용하는 것보다 더 나은 솔루션입니다.

이 명령어 사용

sudo usermod -aG docker $USER

컴퓨터를 다시 시작하는 것이 나에게 도움이 되었습니다.

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

  1. 그룹 sudo groupadd docker
  2. 를 이 합니다.sudo usermod -aG docker $USER
  3. 이합니다.groups
  4. 다음 그룹의 합니다.newgrp docker
  5. 파일 도커의 그룹 소유권을 변경합니다.양말sudo chown root:docker /var/run/docker.sock
  6. . 디렉토리의합니다.sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  7. 마내침▁finally내sudo chmod g+rwx "$HOME/.docker" -R

은 그테트후수있다니습실할을 할 수 있습니다.docker ps -a

기계를 재부팅하는 것이 제게 효과가 있었습니다.

$ reboot

저도 비슷한 문제에 부딪혔지만 만들고 싶은 컨테이너를 /var/run/docker에 마운트해야 했습니다.모든 볼륨을 다른 네임스페이스에서 실행하는 동안 볼륨으로 소켓(Portainer Agent)을 사용할 수 있습니다.일반적으로 컨테이너는 어떤 네임스페이스에서 시작되는지는 중요하지 않습니다. 이것이 바로 포인트입니다. 하지만 다른 네임스페이스에서 액세스가 이루어졌기 때문에 이를 우회해야 했습니다.

추가하기--userns=host컨테이너에 대한 run 명령어를 사용하여 올바른 사용 권한을 얻을 수 있습니다.

꽤 구체적인 사용 사례이지만, 인정하고 싶은 것보다 더 많은 연구 시간이 지난 후, 다른 사람이 이런 상황에 처하게 된다면 전 세계와 공유해야 한다고 생각했습니다 :)

는 이 를 저는이 써추봅니다를서천▁this와 함께 사용해 봅니다.sudo칭찬해주시고 괜찮았습니다.sudo docker pull hello-world또는sudo docker run hello-world

docker그리고.docker-compose이 문제를 방지하려면 작업 도커를 재부팅해야 합니다.

$ sudo systemctl restart docker

질문 내용은 확실히 해당되지 않지만, 오류 메시지를 검색하면서 처음 검색한 결과이기 때문에 여기에 남겨두겠습니다.

먼저 다음 명령을 사용하여 도커 서비스가 실행 중인지 확인합니다.

systemctl status docker.service

실행되고 있지 않으면 시작해 보십시오.

sudo systemctl start docker.service

상태를 다시 확인합니다.

systemctl status docker.service

시작되지 않은 경우 원인을 조사합니다.하고 오류를로)./etc/docker/daemon.json)

도커 데몬은 TCP 포트 대신 유닉스 소켓에 바인딩됩니다.기본적으로 Unix 소켓은 사용자 루트에 의해 소유되며 다른 사용자는 sudo를 통해서만 액세스할 수 있습니다.Docker 데몬은 항상 루트 사용자로 실행됩니다.

도커 명령 앞에 sudo를 추가하지 않으려면 도커라는 유닉스 그룹을 만들고 여기에 사용자를 추가합니다.도커 데몬이 시작되면 도커 그룹의 구성원이 액세스할 수 있는 유닉스 소켓을 생성합니다.

도커 그룹을 만들고 사용자를 추가하려면 다음과 같이 하십시오.

  1. 도커 그룹 만들기

     sudo groupadd docker
    
  2. 도커 그룹에 사용자 추가

     sudo usermod -aG docker $USER
    
  3. 로그아웃했다가 다시 로그인하여 그룹 구성원 자격을 재평가합니다.

    가상 시스템에서 테스트하는 경우 변경 내용을 적용하려면 가상 시스템을 다시 시작해야 할 수 있습니다.

    X Windows와 같은 데스크톱 Linux 환경에서는 세션에서 완전히 로그아웃한 다음 다시 로그인합니다.

    리눅스에서는 다음 명령을 실행하여 그룹에 대한 변경 사항을 활성화할 수도 있습니다.

     newgrp docker 
    
  4. sudo 없이 도커 명령을 실행할 수 있는지 확인합니다.다음 명령은 테스트 이미지를 다운로드하여 컨테이너에서 실행합니다.컨테이너가 실행되면 정보 메시지를 인쇄하고 종료합니다.

    docker run hello-world
    

사용자를 도커 그룹에 추가하기 전에 sudo를 사용하여 도커 CLI 명령을 처음 실행한 경우 sudo 명령으로 인해 ~/.docker/ 디렉토리가 잘못된 사용 권한으로 생성되었음을 나타내는 다음 오류가 표시될 수 있습니다.

   WARNING: Error loading config file: /home/user/.docker/config.json -
   stat /home/user/.docker/config.json: permission denied

이 문제를 해결하려면 ~/.docker/ 디렉토리를 제거하거나(자동으로 다시 생성되지만 사용자 지정 설정이 손실됨) 다음 명령을 사용하여 소유권 및 사용 권한을 변경합니다.

sudo chown "$USER":"$USER" /home/"$USER"/.docker -R

sudo chmod g+rwx "$HOME/.docker" -R

리눅스에서 도커에 대한 다른 모든 사후 설치 단계는 https://docs.docker.com/engine/install/linux-postinstall/ 에서 찾을 수 있습니다.

저는 설명된 모든 방법을 시도했지만 문제를 해결하는 데 도움이 되지 않았습니다.해결책은 selenoid 및 selenoid-ui를 실행할 때 --use-drivers 매개 변수를 사용하는 것이었습니다.아래는 제 도커 파일의 전체 목록입니다.

FROM selenoid/chrome
USER root
RUN apt-get update
RUN apt-get -y install docker.io
RUN curl -s https://aerokube.com/cm/bash | bash
RUN ./cm selenoid start --vnc --use-drivers
RUN ./cm selenoid-ui start --use-drivers
EXPOSE 4444 8080
CMD ["-conf", "/etc/selenoid/browsers.json", "-video-output-dir", "/opt/selenoid/video/"]

경우에는 프로세스 자체(CI 서버 에이전트)가 도커 명령을 실행하지 못했지만 동일한 사용자 내에서 동일한 명령을 실행하려고 하면 작동했습니다.

CI 서버 에이전트를 실행하는 데몬을 다시 시작하면 문제가 해결되었습니다.

이전에 에이전트 내에서 명령이 작동하지 않았던 이유는 도커를 설치하고 도커 그룹 권한을 부여하기 전에 에이전트가 실행되고 있었고 에이전트 프로세스가 캐시된 이전 권한을 사용하여 실패했기 때문입니다.프로세스를 다시 시작하면 캐시가 손실되어 문제가 해결됩니다.

리눅스 사용자를 위한 최단 답변으로 ->

"sudo"를 사용하여 모든 명령을 슈퍼 사용자로 사용해 보십시오.

예:-sudo docker-compose up

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

[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 ~]$

아래 도커 명령을 사용하여 확인

[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 ~]$

도커를 설치하고 '도커' 그룹을 생성한 후 사용자를 추가하면 도커 서비스 단위 파일을 편집합니다.

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

[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

아래 명령이 도움이 되었습니다.

Linux인 경우 실행

sudocmod 666 /var/run/computer.양말

언급URL : https://stackoverflow.com/questions/48957195/how-to-fix-docker-got-permission-denied-issue

반응형