programing

docker. sock 권한이 거부되었습니다.

powerit 2023. 10. 10. 21:15
반응형

docker. sock 권한이 거부되었습니다.

다음과 같은 간단한 도커 명령을 실행하려고 할 때:

$ docker ps -a

오류 메시지가 나타납니다.

권한이 거부되었습니다... /var/run/docker.sock: connect: 권한이 거부됨

권한을 확인할 때

$ ls -al /var/run/

다음 줄이 보입니다.

srw-rw---- root docker docker.sock

그래서 저는 많은 포럼의 조언을 따르고 도커 그룹에 로컬 사용자를 추가합니다.

$ sudo usermod -aG docker $USER

하지만 도움이 되지 않습니다.저는 여전히 같은 오류 메시지를 받습니다.어떻게 고치죠?

셸을 처음 사용하는 경우 명령:

$ sudo usermod -aG docker $USER

가질 필요가 있습니다$USER당신의 껍데기 안에 정의되어 있습니다.이는 기본적으로 존재하는 경우가 많지만 일부 셸에서 로그인 ID로 값을 설정해야 할 수도 있습니다.


사용자의 그룹을 변경해도 사용자가 열고 있는 기존 로그인, 터미널 및 셸은 변경되지 않습니다.로그인을 다시 수행하지 않으려면 다음을 실행하기만 하면 됩니다.

$ newgrp docker

현재 셸에 있는 그룹에 접근할 수 있습니다.


이 작업을 완료한 후 사용자는 서버에 대한 루트 액세스 권한을 효과적으로 갖게 되므로, 제한 없는 sudo 액세스 권한을 가진 신뢰할 수 있는 사용자에 대해서만 이 작업을 수행합니다.

이유: 오류 메시지는 현재 사용자가 도커 엔진에 액세스할 수 없음을 의미합니다. 엔진과 통신하기 위해 UNIX 소켓에 액세스할 수 있는 권한이 부족하기 때문입니다.

빠른 수정:

  1. sudo를 사용하여 명령을 root으로 실행합니다.

    sudo docker ps
    
  2. /var/run/docker의 권한을 변경합니다.현재 사용자를 위한 양말.

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

주의:sudochmod 777 /var/run/docker를 실행하고 있습니다.양말은 당신의 문제를 해결해 줄 것이지만 @AaylaSecura가 지적한 보안 취약점인 모든 사람들을 위한 도커 소켓을 열 것입니다.따라서 로컬 시스템에서 테스트 목적 외에는 사용해서는 안 됩니다.

영구 솔루션:

현재 사용자를 도커 그룹에 추가합니다.

sudo usermod -a -G docker $USER

참고: 변경 사항을 적용하려면 로그아웃 후 다시 로그인해야 합니다.

Docker를 루트가 아닌 사용자로 관리하는 방법에 대한 자세한 내용은 이 블로그를 참조하십시오.

  1. 당신의 것을 확인하세요.$USER됩니다.

    $ echo $USER
    
    $ sudo usermod -aG docker $USER
    
  2. 로그아웃

  3. 로그인 시 도커 서비스를 다시 시작합니다.

    $ sudo systemctl restart docker
    
    $ docker ps
    

명령을 입력하고 sudo 명령 없이 도커 탐색

sudo chmod 666 /var/run/docker.sock

앞서 설명에서 언급했듯이 변경 사항은 재로그인할 때까지 적용되지 않습니다.SSH를 하고 새로운 터미널을 열었다면 새로운 터미널에서 작동했을 것입니다.

하지만 당신이 GUI를 사용하고 새로운 단말기를 열고 있었기 때문에 변경사항이 적용되지 않았습니다.그것이 오류가 사라지지 않은 이유입니다.

그래서 아래 명령은 제 역할을 다했고, 단지 재로그인을 놓쳤을 뿐입니다.

sudo usermod -aG docker $USER

루트가 아닌 사용자로서 도커를 관리해야 합니다.도커 그룹을 만들고 사용자를 추가하려면:

  1. 도커 그룹을 만듭니다.

    $ sudo groupadd docker

  2. 도커 그룹에 사용자를 추가합니다.

    $ sudo usermod -aG docker $USER

  3. 로그아웃 후 다시 로그인하여 그룹 구성원 자격을 재평가합니다.

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

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

리눅스에서 다음 명령을 실행하여 그룹의 변경 내용을 활성화할 수도 있습니다.

$ newgrp docker

  1. sudo 없이 도커 명령을 실행할 수 있는지 확인합니다.

    $ docker run hello-world

***다음 답변에 대한 중요 참고: 도커 그룹이 항상 "docker"인 것은 아니며, 때로는 "dockerroot"인 경우도 있습니다. 예를 들어 센토스 7이 다음과 같이 설치되는 경우도 있습니다.

sudo yum install -y docker

도커를 설치한 후 가장 먼저 해야 할 일은

sudo tail /etc/group

그것은 다음과 같이 말해야 합니다.

......
sshd:x:74:
postdrop:x:90:
postfix:x:89:
yourusername:x:1000:yourusername
cgred:x:996:
dockerroot:x:995:

이 경우에는 "docker"가 아니라 "dockerroot"이므로,

sudo usermod -aG dockerroot yourusername
logout

나의 사용자와 AD 사용자이기 때문에 /etc/group 파일을 수동으로 편집하여 AD 사용자를 로컬 그룹에 추가해야 합니다.안타깝게도 adduser 명령은 nswitch를 인식하지 못하는 것 같으며 그룹에 다른 사용자를 추가할 때 로컬로 정의되지 않은 사용자를 인식하지 못합니다.

그런 다음 /etc/group을 재부팅하거나 새로 고칩니다.이제 sudo 없이 도커를 사용할 수 있습니다.

안부 전해요.

과 같은 할때 :$ docker ps -a

오류 Got permission denied ... /var/run/docker.sock: connect: permission denied.

[…] 어떻게 고치죠?

TL;DR: 두 가지 방법이 있습니다. 첫 번째 방법은 질문 자체에서도 언급했지만 보안 문제가 수반되므로 이 문제를 자세히 설명하고 이 상당히 합리적인 사용 사례에도 적용할 수 있는 두 번째 솔루션을 개발하겠습니다.


하기 위해,은 됩니다 가 .root:docker:

$ ls -l /var/run/docker.sock
srw-rw---- 1 root docker 0 janv. 28 14:23 /var/run/docker.sock

이 명령을 CLI sudo.

이를 방지하기 위해 다음 중 하나를 수행할 수 있습니다.

  1. 합니다()$USERdocker그룹 - 그러나 개인 워크스테이션에서 이 작업을 수행하는 것은 상당히 위험합니다. 왜냐하면 이는 암호 프롬프트나 감사 없이 사용자가 실행하는 모든 프로그램에 루트 권한을 제공하는 것과 마찬가지이기 때문입니다.

    참고 항목:

  2. 달리 표현할 수 있습니다.sudo타이핑 없이 자동으로sudo docker수동: 이를 위해 솔루션은 에 다음 별칭을 추가하는 것으로 구성됩니다(예: 자세한 내용은 이 스레드 참조).

    __docker() {
        if [[ "${BASH_SOURCE[*]}" =~ "bash-completion" ]]; then
            docker "$@"
        else
            sudo docker "$@"
        fi
    }
    alias docker=__docker
    

    그런 다음 새 터미널을 열고 다음을 입력하여 이를 테스트할 수 있습니다.

    docker run --pul〈TAB〉 # → docker run --pull
                           # autocompletion works
    docker run --pull always --rm -it debian:11  # ask one's password
    \docker run --help  # bypass the alias (thanks to the \) and ask no password
    

아래 명령의 도움으로 나는 sudo 없이 docker 명령을 실행할 수 있었습니다.

sudo setfacl -m 사용자:$USER:rw/var/run/docker.양말을

루트 사용자로서 컨테이너에 돌진docker exec -it --user root <dc5> bash

아직 생성되지 않은 경우 도커 그룹 생성groupadd -g 999 docker

도커 그룹에 사용자 추가usermod -aG docker jenkins

권한을 변경chmod 777 /var/run/docker.sock

도커 대신 pns executer를 사용해야 합니다.다음 패치를 실행하여 configmap을 수정하면 모두 준비가 완료됩니다.

kubectl -n argo patch cm workflow-controller-configmap -p '{"data": {"containerRuntimeExecutor": "pns"}}' ;

ref: https://www.youtube.com/watch?v=XySJb-WmL3Q&list=PLGHfqDpnXFXLHfeapfvtt9URtUF1geuBo&index=2&t=3996s

언급URL : https://stackoverflow.com/questions/48568172/docker-sock-permission-denied

반응형