以非root用户身份运行Docker

问题描述:

我试图以非root用户身份运行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? 

我可以运行搬运工为根:

$ 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 --version 
Docker version 1.6.1, build a8a31ef/1.6.1 

我知道,最新为1.10,并有可能为我们公司更新所有泊坞窗将安装到1.9.2,但这需要很多努力和时间。

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

将用户添加到多克尔组(因为泊坞组具有完全控制到插座)

作为根,将用户添加到该搬运工组:

  • 猫的/ etc /组
  • gpasswd -a <用户名>搬运工
  • 退出(如根)
  • 注销
  • 登录作为我们呃,并试图运行“Docker PS”来验证。

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

+0

组 “泊坞窗” 已经存在。我之前添加了它。在'/ etc/gshadow'中,我有'docker:!:: david'和'/ etc/group',我有'docker:x:1001:david'这个入口。当我以'david'登录并执行'groups'命令时,我得到该用户在组“docker”中。 –

+0

请注意,任何添加到码头组的人都可能被视为root。 https://github.com/moby/moby/issues/9976 –

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

+0

但是当您重新启动旧的权限时。 – Makoton

+0

660将足够用于任何目的。如果所有人都可以完全访问套接字,那么可以将所有人添加到docker组中。 –

我的搬运工版本是17.06.1-CE,在Ubuntu 16.04.3建立874a737 LTS
对于Linux发行版,使用systemd有一个名为docker.socket

[email protected]:~$ 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. 
[email protected]:~$ 

文件位置的服务是在/lib/systemd/system/docker.socket

[email protected]:~$ 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 
[email protected]:~$ 

从该文件中,我们可以改变SocketMode=0660SocketMode=0666

重启docker.socket

systemctl restart docker.socket 

我们的码头工人套接字权限将066意味着每个用户都可以读,写进去。

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

[email protected]:~$ 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 
[email protected]:~$ 

[email protected]:~$ 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 
[email protected]:~$ 

注意的非root访问泊坞窗命令Why we don't let non-root users run Docker in CentOS, Fedora, or RHEL

参考:

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