以非root用户身份运行Docker

时间:2016-03-07 16:58:14

标签: docker

我正在尝试以非root用户身份运行docker。当我尝试时,我收到以下错误:

$ docker ps
FATA[0000] Get http:///var/run/docker.sock/v1.18/containers/json: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS? 

我可以以root身份运行docker:

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[...]

我已将此用户放入Unix组docker

$ groups
domain users docker suappprod stashadmin config_mgmt remote server access sudevmail sudevsvn

但是,如果没有 sudoing 以root身份,该用户仍然无法运行大多数docker命令。

我使用的是较旧版本的docker:

$ docker --version
Docker version 1.6.1, build a8a31ef/1.6.1

我知道最新的是1.10,我们公司可以将所有docker安装更新到1.9.2,但这需要花费很多精力和时间。

还有什么我需要看的吗?用户已多次登录和注销。我还没有重新启动系统。

3 个答案:

答案 0 :(得分:5)

检查此命令的内容 - > ls -l /var/run/docker.sock 您可能希望使用chmod(例如:sudo chmod 777 /var/run/docker.sock)更改此文件的权限,具体取决于您要授予的权限。

答案 1 :(得分:4)

将用户添加到Docker组(因为Docker组可以完全控制套接字)

以root用户身份将用户添加到泊坞窗组:

  • Cat / etc / group
  • gpasswd -a< username>搬运工
  • 退出(以root身份)
  • 注销
  • 以用户身份登录,并尝试运行" Docker PS"验证。

这就是我能够一次又一次在我的Ubuntu系统上进行设置的方法。

答案 2 :(得分:4)

我的docker版本是17.06.1-ce,在Ubuntu 16.04.3 LTS上构建874a737 对于使用systemd的Linux发行版,有一个名为docker.socket

的服务
linux@linux-ubuntu:~$ sudo systemctl status docker.socket
● docker.socket - Docker Socket for the API
   Loaded: loaded (/lib/systemd/system/docker.socket; disabled; vendor preset: enab
       Active: active (running) since Sab 2017-08-26 01:15:26 WIB; 9min ago
   Listen: /var/run/docker.sock (Stream)

Agu 26 01:15:26 hasto-ubuntu systemd[1]: Starting Docker Socket for the API.
Agu 26 01:15:26 hasto-ubuntu systemd[1]: Listening on Docker Socket for the API.
linux@linux-ubuntu:~$ 

文件位置位于/lib/systemd/system/docker.socket

linux@linux-ubuntu:~$ cat /lib/systemd/system/docker.socket 
[Unit]
Description=Docker Socket for the API
PartOf=docker.service

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
linux@linux-ubuntu:~$ 

我们可以通过该文件将SocketMode=0660更改为SocketMode=0666

重新启动docker.socket

systemctl restart docker.socket

我们的docker socket权限为066表示每个用户都可以读取和写入。

现在,每个用户都可以以非root用户身份运行docker命令。

linux@linux-ubuntu:~$ docker ps -a
CONTAINER ID        IMAGE                    COMMAND                  CREATED      STATUS                  PORTS  NAMES
03eb2ba2eacd        google/cadvisor:latest   "/usr/bin/cadvisor..."   5 weeks ago  Exited (0) 5 weeks ago         elk_cadvisor_1
52efa40edf3a        portainer/portainer      "/portainer"             7 weeks ago  Exited (2) 11 days ago         portainer
linux@linux-ubuntu:~$ 

linux@linux-ubuntu:~$ docker images
REPOSITORY          TAG                      IMAGE ID            CREATED           SIZE
portainer/portainer latest                   96196eaa6b3         8 weeks ago       10.4MB
google/cadvisor     latest                   f9ba08bafdea        5 months ago      57.3MB
linux@linux-ubuntu:~$ 

请注意对docker命令Why we don't let non-root users run Docker in CentOS, Fedora, or RHEL

的非root访问权限

参考:

  1. Docker Documentation : Control and configure Docker with systemd
  2. Github docker systemd