우분투에서 도커에 대한 권한 문제를 어떻게 해결합니까?


35

여기에 설명 된대로 도커를 설치 했습니다 . 내가 사용하는 우분투 트러스티 14.04 (LTS) (64 비트) . 설치하는 동안 모든 것이 잘되었습니다. 또한 명령 $ sudo docker run -i -t ubuntu /bin/bash이 잘 완료되었습니다 (열린 콘솔에 "exit"를 입력 한 후. 다른 작업을 시도 할 때 "permission denied"가 나타납니다. 예를 들면 다음과 같습니다.

`$ sudo docker run -d -P training/webapp python app.py`

로이 우스 Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

` docker info`

로이 우스 Get http:///var/run/docker.sock/v1.12/info: dial unix /var/run/docker.sock: permission denied

이것을 해결하는 방법? 문제에 대해 봤지만 사건에 대한 해결책을 찾을 수 없습니다.

답변:


50

도커 그룹이 없으면 추가하십시오.

$ sudo groupadd docker

연결된 사용자 ${USER}를 docker 그룹에 추가하십시오 . 원하는 사용자와 일치하도록 사용자 이름을 변경하십시오.

$ sudo gpasswd -a ${USER} docker

Docker 데몬을 다시 시작하십시오.

$ sudo service docker restart # Or docker.io for older versions
# 18.04+ with snap:
$ sudo systemctl restart snap.docker.dockerd

그룹 권한을 업데이트하려면 로그 아웃했다가 다시 로그인해야합니다. 이를 피하기 위해 다음과 같이 서브 쉘로 전환 할 수 있습니다. 또는 이 질문에 언급 된 다른 트릭을 사용하십시오 .

su - $USER

14
이 기능을 적용하려면 재부팅해야했습니다.
더 이상 사용되지 않는

8
재부팅 할 필요없이 로그 아웃하고 로그인하면됩니다.
Ajay Gautam

2
exec $SHELL그렇지 않은 경우에도 로그 아웃했습니다 . 어떤 메커니즘을 로그 아웃하여 문제를 해결했는지 알고 싶습니다. 이것은 창문이 아니다!
Darth Egregious

1
Fedora에서 먼저 편집 /etc/selinux/config하고 넣어야 합니다SELINUX=disabled
Junior M

1
좋은 설명! 당신은 최고예요! :)
Francis Rodrigues

5

CentOS 또는 RedHat를 실행중인 경우 먼저 다음을 실행하여 SELinux를 비활성화해야합니다.

setenforce 0

SELinux를 다시 활성화하거나 실행하려면 Eiter가 나중에 다시 시작 setenforce 1됩니다.


4

selinux로 인해 동일한 문제가 발생했습니다. 다음과 같이 selinux가 범인인지 확인할 수 있습니다.

  1. selinux 비활성화 : setenforce 0
  2. 재시도

selinux를 비활성화하면 문제가 해결 되었더라도 비활성화하지 않아도됩니다.

  1. selinux를 활성화하십시오 : setenforce 1
  2. selinux 설정에서 소켓 연결을 허용하십시오 : setsebool docker_connect_any true
  3. --priviledged옵션으로 Docker 컨테이너를 실행하십시오.

3

귀하의 사용자 이름이 이미 도커 그룹에 있다고 가정합니다. 이를 확인하려면 아래 명령을 실행하십시오.

id -nG

그렇지 않은 경우 아래 명령으로 사용자를 docker 그룹에 추가해야합니다.

sudo groupadd docker
sudo usermod -aG docker $USER

명령을 실행하면 sudo systemctl start docker도커 프로세스가 생성됩니다. 해당 도커 프로세스에는 dockerd데몬 스레드 가 포함되어 있습니다 . 이 명령은 또한 기본 docker.sock유닉스 소켓을 만듭니다 . docker.sock소켓은 지속적으로 경청한다 dockerd데몬 스레드. 이를 통해 docker.pid프로세스로 커널 레벨 IPC를 수행 할 수 있습니다 . 이 도커 소켓을 사용하려면 프로세스 수준 ( docker.pid) 및 파일 수준 ( docker.sock)의 적절한 권한이 있어야합니다 . 따라서 아래 두 명령을 실행하면 문제가 해결됩니다. sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid


1

하여 현재 버전 우리는 그룹을 추가 할 필요가 없습니다 docker.
설치시 자동으로 존재합니다. 다음 명령을 사용하여 확인할 수 있습니다.

$ sudo groupadd docker
groupadd: group 'docker' already exists

따라서 Docker를 루트가 아닌 사용자로 관리 하려면 사용자를 docker 그룹에 추가 한 다음 로그 아웃했다가 다시 로그인하여 그룹 멤버쉽을 다시 평가하십시오.

$ sudo usermod -aG docker $USER
$ logout

다시 로그인 할 때 확인하려면

$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

GROUP:docker새 기본 그룹 으로 사용하도록 강요 할 수도 있습니다 .

$ sudo chown "$USER":"docker" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R
$ sudo usermod -g docker ${USER}
$ logout

다시 로그인 할 때 확인하려면

$ id
uid=1001(<user_name>) gid=999(docker) groups=999(docker),...
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.