当前位置: 首页>>技术教程>>正文


linux – 如何解决ubuntu中的docker权限问题?

, , ,

问题描述

我已经按照here的说明安装了docker。我使用Ubuntu Trusty 14.04 (LTS) (64-bit)。安装过程中的一切都很好。另外,命令$ 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中重新使用

如何解决呢?我在问题上用谷歌搜索,但找不到适合我的案例的解决方案。

最佳回答

添加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

您应该注销并再次登录以更新组权限。为避免这种情况,您可以按如下所示切换到子 shell 。或使用this question中提到的任何其他技巧:

su - $USER

次佳回答

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

setenforce 0

随后,Eiter重新启动以重新启用SELinux或运行setenforce 1

第三种回答

由于selinux,我遇到了同样的问题。您可以通过以下方法检查selinux是否是罪魁祸首:

  1. 禁用selinux:setenforce 0

  2. 重试

如果禁用selinux解决了您的问题,则没有理由将其禁用:

  1. 启用selinux:setenforce 1

  2. 在selinux配置中允许套接字连接:setsebool docker_connect_any true

  3. 使用--priviledged选项运行Docker容器

第四种回答

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

id -nG

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

sudo groupadd docker
sudo usermod -aG docker $USER

当执行命令sudo systemctl start docker时,它将创建一个docker进程。该docker进程包含dockerd守护程序线程。该命令还会创建默认的docker.sock Unix套接字。 dockerd守护程序线程会连续侦听docker.sock套接字。这使您可以通过docker.pid流程来完成kernel-level 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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7957.html,未经允许,请勿转载。