以非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
参考:
- Docker文档:使用systemd控制和configurationDocker
- Github docker systemd