如何解决Ubuntu中的Docker权限问题?


35

我已经按照此处所述安装了docker 。我使用Ubuntu Trusty 14.04(LTS)(64位)。安装过程中的一切都很好。该命令$ sudo docker run -i -t ubuntu /bin/bash也很好地完成了(在打开的控制台中键入“ exit”后。但是,当我尝试执行其他操作时,我将获得“ permission否认”。例如:

`$ 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

如何解决呢?我用谷歌搜索了这个问题,但找不到适合我的情况的解决方案。

Answers:


50

添加docker组(如果尚不存在)。

$ 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,2015年

2
即使exec $SHELL没有注销,注销也可以。我很想知道通过哪种机制注销可以解决此问题。这不是窗户!
达斯(Garth Egregious)

1
在Fedora中,首先必须编辑/etc/selinux/config并放入SELINUX=disabled,然后重新启动Linux
Junior M

1
很好的解释!你是最好的!:)
弗朗西斯·罗德里格斯

5

如果您正在运行CentOS或RedHat,则可能必须先通过运行以下命令禁用SELinux:

setenforce 0

Eiter之后重新启动以重新启用SELinux或运行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

我认为,您的用户名已经在docker组中。要检查这一点,请发出以下命令。

id -nG

如果不是,则需要通过以下命令将用户添加到docker组中。

sudo groupadd docker
sudo usermod -aG docker $USER

当执行命令时sudo systemctl start docker,它将创建一个docker进程。该docker进程包含dockerd守护程序线程。该命令还会创建默认的docker.sockUnix套接字。该docker.sock插座不断通过听取dockerd守护线程。这使您可以在docker.pid进程中执行内核级IPC 。为了能够使用此docker套接字,您需要具有进程级别(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

因此,为了以非root用户身份管理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),...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.