[Ubuntu]在不使用sudo命令的情况下运行docker的设置和注意事项

2019年10月3日

关于在Ubuntu上使用docker时如何在不使用sudo的情况下启用docker的说明。

触发

安装docker之后sudo当我在没有命令的情况下检查操作时,发生了错误。

#从Ubuntu终端docker运行hello-world 

docker:尝试连接到Unix上的Docker守护程序套接字时,权限被拒绝:///var/run/docker.sock:发布http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/create:拨打unix /var/run/docker.sock:connect:权限被拒绝,请参阅“ docker run –help”。

似乎对docker守护程序的访问已被拒绝。 我输入了sudo docker run hello-world并且它起作用了。

错误的原因似乎是由于以下原因。

Docker通过unix套接字或tcp / ip与以root特权运行的守护进程(dockerd)通信,但是您需要属于docker组或具有root特权才能访问dockerd。

了解使用Docker将用户添加到Docker组的危险

通过添加sudo命令,一般用户可以执行没有root特权(例如,连接到守护程序)就无法执行的命令。但是每次添加sudo都是乏味的。

对策与注意事项

不使用sudo运行的一​​种方法是使用户属于dokcer组(通常是googled组),但似乎也存在安全问题。

参考:在Docker组中授予类似root的特权时的风险(官方文档)

如果您想使用不带sudo的docker, newgrp 据说最好暂时属于一个组或用户名称空间。

sudo groupadd docker#$使用用户名的用户sudo usermod -aG docker $ USER newgrp docker docker运行hello-world 

您好,Docker!
此消息表明您的安装似乎正常工作。

为了生成此消息,Docker采取了以下步骤:

1. Docker客户端联系了Docker守护进程。
2. Docker守护程序从Docker Hub中提取了“ hello-world”映像。
(amd64)
3. Docker守护程序从该映像创建了一个新容器,该容器运行
可执行文件,产生您当前正在读取的输出。
4. Docker守护程序将该输出流式传输到Docker客户端,该客户端将其发送给它
到您的终端。

要尝试更具野心的东西,可以使用以下命令运行Ubuntu容器:
$ docker run -it ubuntu bash

使用免费的Docker ID共享图像,自动化工作流程以及更多功能:https://hub.docker.com/

有关更多示例和想法,请访问:
https://docs.docker.com/get-started/