是否可以不使用 sudo 来使用 docker?

是否可以不使用 sudo 来使用 docker?

根据关于docker的这个问题,以非 root 身份运行它就像将非 root 用户名添加到组docker,然后注销并重新登录一样简单。果然,当我将它用作图像时,一切顺利。但对于另一个名为 的测试图像,sudo我仍然收到错误 - 见下文。hello-worldwhalefortuneaccess denied

现在一般都不能以非 root 身份运行 docker 了吗?我使用的是 Ubuntu 19.04,这是示例的更新版本,并且提到以非 root 身份运行 docker 可能会存在安全漏洞。

我的想法是以普通用户身份运行 nvidia-docker,这可能吗(或者甚至是个好主意)?

$ sudo docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest:   sha256:6540fc08ee6e6b7b63468dc3317e3303aae178cb8a45ed3123180328bcc1d20f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
  1. The Docker client contacted the Docker daemon.
  2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64)
  3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
  4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.

To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/

For more examples and ideas, visit:
https://docs.docker.com/get-started/

$ docker run --rm dbkdoc/whalefortune
docker: Got permission denied while trying to connect to the 
Docker daemon socket at unix:///var/run/docker.sock: 
Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: 
dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

答案1

如果您不想在 docker 命令前面加上 sudo,请创建一个名为 docker 的 Unix 组并向其中添加用户。当 Docker 守护进程启动时,它会创建一个可供 docker 组成员访问的 Unix 套接字。

警告:

docker 组授予与 root 用户相同的权限。有关这对系统安全性的影响的详细信息,请参阅Docker Daemon 攻击面


如果你仍然想运行不带以下内容的 docker sudo

  • 如果不存在,请添加 docker 组:

     sudo groupadd docker
    
  • 将连接的用户“$USER”添加到 docker 组。如果不想使用当前用户,请将用户名更改为您首选的用户:

     sudo usermod -aG docker $USER
    
  • 执行newgrp docker或注销/登录以激活对组的更改(如果在虚拟机上测试,可能需要重新启动虚拟机才能使更改生效)。

  • 您可以使用

     docker run hello-world
    

    检查是否可以在不使用 sudo 的情况下运行 docker。

附言:
sudo如果您在将用户添加到组之前 最初使用 Docker CLI 命令运行docker,则可能会看到以下错误,这表明~/.docker/由于命令而创建了具有不正确的权限的目录sudo

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

要解决此问题,请删除~/.docker/目录(它会自动重新创建,但所有自定义设置都会丢失),或者使用以下命令更改其所有权和权限:

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

完成后,您需要重新启动会话/重新登录sudo su $USER才能使用无需的 docker sudo

来源: Docker 文档

相关内容