在Ubuntu上安装Docker非常容易! 任何人,甚至新手也可以在15分钟内安装好它。安装好Docker后,我注意到大多数的Docker操作不能通过普通用户进行。我必须要以root用户或者sudo来运行。每当我尝试以非root或者不适用sudo运行Docker时,我会得到下面的错误:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied

例如,当我想要使用下面的命令查看Docker版本:

$ docker version

然后,我会得到下面的错误信息:

Client: Docker Engine - CommunityVersion: 19.03.8API version: 1.40Go version: go1.12.17Git commit: afacb8b7f0Built: Wed Mar 11 01:25:46 2020OS/Arch: linux/amd64Experimental: falseGot permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/version: dial unix /var/run/docker.sock: connect: permission denied

但是当我使用sudo权限运行命令时:

$ sudo docker version

它会显示当前安装的Docker版本以及更多的信息:

Client: Docker Engine - Community Version:           19.03.8 API version:       1.40 Go version:        go1.12.17 Git commit:        afacb8b7f0 Built:             Wed Mar 11 01:25:46 2020 OS/Arch:           linux/amd64 Experimental:      falseServer: Docker Engine - Community Engine:  Version:          19.03.8  API version:      1.40 (minimum version 1.12)  Go version:       go1.12.17  Git commit:       afacb8b7f0  Built:            Wed Mar 11 01:24:19 2020  OS/Arch:          linux/amd64  Experimental:     false containerd:  Version:          1.2.13  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429 runc:  Version:          1.0.0-rc10  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init:  Version:          0.18.0  GitCommit:        fec3683




docker容器中 非root用户启动 非root用户运行docker_linux切换到root用户


在查看Docker文档后,我意识到Docker的daemon默认是连接到了一个Unix socket而不是TCP端口。由于Unix socket属于root用户,Docker daemon将只能通过root用户运行。因此普通用户不能执行大多数Docker命令。

如果你想以非root用户在Linux上运行Docker,你需要通过下面的步骤进行实现。我在Ubuntu 18.04服务器上进行了测试,他可以很好地工作! 同样他也应该能在其它Linux发行版上良好运行。

在Linux上以非root用户运行Docker

要解决Docker权限不足的问题并以非root用户使用Docker,使用下面的命令创建一个"docker"用户组:

$ sudo groupadd docker

下一步,将你的用户添加到docker组中:

$ sudo usermod -aG docker $USER

在将用户添加到docker组后,登出会话然后重新登入以使得设置生效。

或者,也可以通过下面的命令来将改变应用到组:

$ newgrp docker

从现在开始,普通用户也可以不适用sudo权限运行Docker了。

我们以普通用户运行下面的命令:

$ docker version$ docker run hello-world

输出示例:


docker容器中 非root用户启动 非root用户运行docker_docker容器中 非root用户启动_02


看到了吗?我可以这些命令我都可以在不适用sudo的情况下运行。

有时,当你在将用户添加到Docker组前已经通过sudo权限运行了一些Docker命令,你可能会看到下面的错误。

WARNING: Error loading config file: /home/user/.docker/config.json -stat /home/user/.docker/config.json: permission denied

上面的错误表明你的~/.docker/目录因为sudo命令而具有不正确的权限。要解决这个问题,你需要通过下面的命令来改变目录所有权:

$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R$ sudo chmod g+rwx "$HOME/.docker" -R

登出再登入来使其生效。

如果这仍不能解决问题,你也许需要删掉~/.docker/目录。它会在后面被自动生成,不过这样你会失去一所有的自定义设置。

希望这对你有帮助。

往期文章

Linux下制作系统的U盘启动盘

Linux下如何拼接PDF文件

Linux下挂载使用Windows的NTFS分区

Quantum ESPRESSO教程之电子局域函数计算(Pymatflow篇)

本文译自: How To Run Docker As Non-root User In Linux

译者: 生材有道