Docker容器卷无法正常工作

时间:2020-03-11 05:29:37

标签: docker

实际上,我正在尝试运行以下命令

docker run -it --rm -v $(pwd):/var/www/html --user node node:12.13.1-alpine ash.

预期结果

容器内的文件(即/var/www/html)应具有用户作为节点

实际结果

但是,容器内的文件显示的用户与主机的用户相同。 另外,不能在容器内创建目录。

它正在为我的其他同事工作。因此,对此将提供任何帮助。

非常感谢, 阿尔文

注意:

  • Docker版本19.03.7,内部版本7141c199a2
  • 已向docker命令添加了必要的权限,因此它不会 需要 sudo 来运行

2 个答案:

答案 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时,它将以普通节点用户模式运行