实际上,我正在尝试运行以下命令
docker run -it --rm -v $(pwd):/var/www/html --user node node:12.13.1-alpine ash.
容器内的文件(即/var/www/html
)应具有用户作为节点。
但是,容器内的文件显示的用户与主机的用户相同。 另外,不能在容器内创建目录。
它正在为我的其他同事工作。因此,对此将提供任何帮助。
非常感谢, 阿尔文
注意:
答案 0 :(得分:0)
使用--user运行docker不会更改原始现有文件的权限。从Docker参考:
开发人员可以使用Dockerfile USER指令设置默认用户以运行第一个进程。启动容器时,操作员可以通过传递-u选项来覆盖USER指令。
它仅覆盖在容器内运行Node.js的用户。挂载期间,/var/www/html
的原始权限和所有者不变。通过ls -n
进行验证,并在将其安装在Docker中时查看文件夹所有者的UID是否相同。确保UID与您指定的node
用户相同。
我不知道它如何在您的同事计算机中工作。这就是为什么使用UID / GID而不是仅使用用户名很重要。容器中的相同用户名可以具有与主机中相同的用户名不同的UID。
编辑:我检查了您使用的节点图像是否包含node
用户,其UID为1000。在Linux中创建的第一个用户通常也具有UID1000。因此,如果/var/www/html
由UID 1000拥有,它会运行。但是,UID 1000可能在Docker和主机中属于不同的用户名。因为您指定了--user node
,并且由于用户名node
本身存在而被转换为容器内的UID 1000,所以如果/var/www/html
由主机中的不同UID拥有,则该名称将无效。是你的情况。
答案 1 :(得分:0)
您必须在构建之前将USER添加到Dockerfile中
# App is running normal user mode
USER node
所以现在当您运行docker image时,它将以普通节点用户模式运行