为什么 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
也许这就是问题所在?
最佳答案
运行 nginx 的进程在 root 下运行,因此它使用 root 的 UID 写入文件。
解决方案
export UID && docker run -v $(pwd)/test_dir/:/home/ -u=$UID:$UID --name nginx -d nginx
这将使用您的本地 UID 运行 nginx 进程,从而使用相同的用户写入文件。我没有在 mac 下测试过,但这是 linux 上的常见解决方案/设置,所以它对你有用。
你如何验证这是否有效?
使用 sleep 运行 nginx 使其运行很长时间,即使配置错误。
export UID && docker run -v $(pwd)/test_dir/:/home/ -u $UID:$UID --name nginx -d nginx sleep 3000000000000
现在在容器中执行并运行 whoami 以验证用户的 uid。例如在我的机器上
docker exec -it nginx /bin/bash
I have no name!@f12fa9c368e6:/$ whoami
whoami: cannot find name for user ID 501
关于Docker 以 root 身份挂载卷,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51973179/