Docker以root身份挂载卷

时间:2018-08-22 18:37:58

标签: docker permissions docker-volume

为什么Docker将卷装载为root,而不是以运行命令docker run的用户身份装载?可以通过设置一些参数/参数等来更改此设置吗?

MWE:

$ ls -la
drwxr-xr-x 2 ubuntu   ubuntu   4096 Aug 22 18:09 shinylog

$ docker run -v $(pwd)/test_dir/:/home/ --name nginx -d nginx
bf340face11485a81ee7c208d490f11abbdc84089ffe9c01d71ffcf8b9ffc27d

$ ls -la
drwxr-xr-x 2 ubuntu   ubuntu   4096 Aug 22 18:09 shinylog
drwxr-xr-x 2 root     root   4096 Aug 22 18:33 test_dir

$ echo $USER
ubuntu

编辑: 安装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.38/containers/json: dial 
unix /var/run/docker.sock: connect: permission denied

并执行:

sudo usermod -a -G docker $USER

也许是问题所在?

1 个答案:

答案 0 :(得分:0)

运行nginx的进程在root下运行,因此它使用root的UID写入文件。

解决方案

export UID && docker run -v $(pwd)/test_dir/:/home/ -u=$UID:$UID  --name nginx -d nginx

这将使用您的本地UID运行nginx进程,从而以相同的用户身份写入文件。我尚未在Mac上进行测试,但这是Linux上的常见解决方案/设置,因此它将为您工作。

您如何验证它是否有效?

即使配置错误,也可以通过睡眠运行nginx使其长时间运行。

export UID && docker run -v $(pwd)/test_dir/:/home/ -u $UID:$UID --name nginx -d nginx sleep 3000000000000

现在在容器中执行exec并运行whoami以验证用户的uid。例如在我的机器上

docker exec -it nginx /bin/bash
I have no name!@f12fa9c368e6:/$ whoami
whoami: cannot find name for user ID 501