以非root用户身份运行Docker

我试图运行docker作为非root用户。 当我尝试时,我得到以下错误:

$ 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 

但是,仍然显示这个用户不能以root身份运行大部分的docker命令。

我在一个老版本的docker上:

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

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

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

检查这个命令给出了什么 – > ls -l /var/run/docker.sock您可能想要使用chmod(例如: sudo chmod 777 /var/run/docker.sock )来更改此文件的权限,具体取决于权限你想给。

将用户添加到Docker组(由于Docker组完全控制了套接字)

以root身份,将用户添加到docker组中:

  • 猫/ etc /组
  • gpasswd -a <用户名>泊坞窗
  • 退出(以root身份)
  • 注销
  • 以用户身份login,并尝试运行“Docker PS”进行validation。

这就是我已经能够一次又一次地在我的Ubuntu系统上进行设置了。

我的docker版本是17.06.1-ce,在Ubuntu 16.04.3 LTS上创build了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套接字许可将是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:~$ 

请注意非root用户访问docker命令为什么我们不让非root用户在CentOS,Fedora或RHEL中运行Docker

参考:

  1. Docker文档:使用systemd控制和configurationDocker
  2. Github docker systemd