我正在跟踪this Docker tutorial,这创建了一个简单的Docker管理的Django站点,当我尝试运行docker-compose up
启动Docker项目时,出现了模棱两可的错误:
ERROR: Couldn't connect to Docker daemon at http+docker://localunixsocket - is it running?
该错误表明Docker守护程序未运行,但是service docker status
显示Docker守护程序正在运行。
相反,如果我运行sudo docker-compose up
,则它成功了,但是它把我的许多本地开发文件丢给了root用户,这很容易修复,但很烦人。
为什么Docker仅启动本地Django开发服务器需要root访问权限?我该如何解决?
我的版本:
Docker version 18.06.1-ce, build e68fc7a
docker-compose version 1.11.1, build 7c5d5e4
Ubuntu 16.04.5 LTS
答案 0 :(得分:0)
如果您完全可以运行任何Docker命令,则可以简单地将主机root:
docker run --rm -v /:/host busybox \
cat /host/etc/shadow
此外,Docker容器经常在其自己的容器空间中以root用户身份运行,这意味着您选择将主机文件系统的任何部分公开给它们,它们可以作为任意用户ID进行任意更改。您可以使用docker run -u
选项来选择其他用户ID,但是也可以选择任何用户ID,甚至可以选择属于共享系统上另一个用户的用户ID。
使用sudo
作为获得需要它的东西的root特权的方法是非常合理的,这是一种典型的现成Docker配置。
在一天结束时,唯一真正的门是文件/var/run/docker.sock
的Unix权限。这通常是专用docker
组拥有的0660模式。如果您不介意普通用户无需太多控制就可以读写任意主机文件,则可以将自己添加到该组中。这通常适用于开发人员笔记本电脑之类的东西;但在类似生产系统的任何事物上,都应对其安全性含义进行一些实际考虑。