为什么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
也许是问题所在?
答案 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