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 소켓에 액세스할 수 있는 권한이 부족하기 때문입니다.
빠른 수정:
sudo를 사용하여 명령을 root으로 실행합니다.
sudo docker ps
/var/run/docker의 권한을 변경합니다.현재 사용자를 위한 양말.
sudo chown $USER /var/run/docker.sock
주의:sudochmod 777 /var/run/docker를 실행하고 있습니다.양말은 당신의 문제를 해결해 줄 것이지만 @AaylaSecura가 지적한 보안 취약점인 모든 사람들을 위한 도커 소켓을 열 것입니다.따라서 로컬 시스템에서 테스트 목적 외에는 사용해서는 안 됩니다.
영구 솔루션:
현재 사용자를 도커 그룹에 추가합니다.
sudo usermod -a -G docker $USER
참고: 변경 사항을 적용하려면 로그아웃 후 다시 로그인해야 합니다.
Docker를 루트가 아닌 사용자로 관리하는 방법에 대한 자세한 내용은 이 블로그를 참조하십시오.
당신의 것을 확인하세요.
$USER
됩니다.$ echo $USER $ sudo usermod -aG docker $USER
로그아웃
로그인 시 도커 서비스를 다시 시작합니다.
$ sudo systemctl restart docker $ docker ps
명령을 입력하고 sudo 명령 없이 도커 탐색
sudo chmod 666 /var/run/docker.sock
앞서 설명에서 언급했듯이 변경 사항은 재로그인할 때까지 적용되지 않습니다.SSH를 하고 새로운 터미널을 열었다면 새로운 터미널에서 작동했을 것입니다.
하지만 당신이 GUI를 사용하고 새로운 단말기를 열고 있었기 때문에 변경사항이 적용되지 않았습니다.그것이 오류가 사라지지 않은 이유입니다.
그래서 아래 명령은 제 역할을 다했고, 단지 재로그인을 놓쳤을 뿐입니다.
sudo usermod -aG docker $USER
루트가 아닌 사용자로서 도커를 관리해야 합니다.도커 그룹을 만들고 사용자를 추가하려면:
도커 그룹을 만듭니다.
$ sudo groupadd docker
도커 그룹에 사용자를 추가합니다.
$ sudo usermod -aG docker $USER
로그아웃 후 다시 로그인하여 그룹 구성원 자격을 재평가합니다.
가상 시스템에서 테스트하는 경우 변경 내용을 적용하려면 가상 시스템을 다시 시작해야 할 수 있습니다.
X Windows와 같은 데스크톱 Linux 환경에서는 세션에서 완전히 로그아웃한 다음 다시 로그인합니다.
리눅스에서 다음 명령을 실행하여 그룹의 변경 내용을 활성화할 수도 있습니다.
$ newgrp docker
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
.
이를 방지하기 위해 다음 중 하나를 수행할 수 있습니다.
합니다()
$USER
docker
그룹 - 그러나 개인 워크스테이션에서 이 작업을 수행하는 것은 상당히 위험합니다. 왜냐하면 이는 암호 프롬프트나 감사 없이 사용자가 실행하는 모든 프로그램에 루트 권한을 제공하는 것과 마찬가지이기 때문입니다.참고 항목:
- 도커 공식 문서의 이 페이지는 다음과 같습니다.
https://docs.docker.com/engine/security/ # dock- daemon-공격-표면 - 이 페이지는 다음과 관련된 공격을 문서화합니다.
https://fosterelli.co/privilege-escalation-via-docker.html
- 도커 공식 문서의 이 페이지는 다음과 같습니다.
달리 표현할 수 있습니다.
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
'programing' 카테고리의 다른 글
$ digest 사이클을 부를 때? (0) | 2023.10.10 |
---|---|
C 및 C++ 개발을 위한 Eclipse의 대안? (0) | 2023.10.10 |
csc.exe 파일이 포함된 smarterasp.net 에 웹사이트를 게시하는 데 문제가 있습니까? (0) | 2023.10.10 |
MySQL 와일드카드 탈출 (0) | 2023.10.10 |
라라벨 웹사이트에서 테마 옵션을 구현하는 방법은? (0) | 2023.10.10 |