Docker卷和主机权限

5
当我运行一个Docker镜像,例如:
docker run -v /home/n1/workspace:/root/workspace -it rust:latest bash

我创建一个容器中的目录,例如:

mkdir /root/workspace/test

我的主机上它归root所有。这意味着每次关闭容器后,我都必须更改权限才能操作该目录。

有没有办法告诉Docker以特定用户的身份处理来自我的主机(宿主机)角度的目录和文件?

2个回答

2
为了让文件的所有权匹配,您需要在容器内部以与主机上相同的uid运行应用程序。我的解决方案是以root身份启动容器,调整容器内部用户的uid以匹配卷挂载,然后su到该用户以运行应用程序。此存储库中可以找到执行此操作的脚本:https://github.com/sudo-bmitch/docker-base
该存储库中的fix-perms脚本处理容器内部uid/gid的更改,entrypoint脚本具有exec gosu $username "$@",以所选用户身份运行应用程序。

1
当然,因为Docker默认使用root用户。您应该在docker容器中创建用户,切换到该用户,然后创建文件夹,这样您就可以在主机上获得没有root权限的文件夹了。
Dockerfile
FROM rust:latest
...
RUN useradd -ms /bin/bash myuser
USER myuser

1
文件将具有相同的数字用户ID,而无需进行Docker级别的重新配置;有两个不同的/etc/passwd文件将其映射回用户名。这会导致“容器内我的文件归www-data所有,但在主机上是ntpd”的问题。 - David Maze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接