Docker容器卷未按预期工作

Docker容器卷未按预期工作,docker,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,版本7141c19

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

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
运行docker run with--用户不会更改原始现有文件的权限。从Docker参考:

开发人员可以使用Dockerfile用户指令将默认用户设置为运行第一个进程。启动容器时,操作员可以通过传递-u选项来覆盖用户指令

它仅覆盖容器内运行Node.js的用户。装载期间,
/var/www/html
的原始权限和所有者保持不变。通过
ls-n
验证这一点,并查看文件夹所有者的UID在装入Docker时是否相同。确保UID与指定的
节点
用户相同

我不知道它在你同事的电脑里是怎么工作的。这就是为什么使用UID/GID而不是仅仅使用用户名很重要的原因。容器中的同一用户名可以在主机中具有相同用户名的不同UID


编辑:我检查了您使用的节点图像包含uid1000的
node
user。在Linux中创建的第一个用户通常也有UID1000。因此,如果uid1000拥有
/var/www/html
,它将运行。但是UID1000在Docker和主机中可能属于不同的用户名。因为您指定了
--user node
,当username
node
本身存在时,该节点在容器中被转换为UID 1000,所以如果主机中的不同UID拥有
/var/www/html
,则它将不起作用,这可能就是您的情况。

在构建之前,您必须将用户添加到Dockerfile中

# App is running normal user mode
USER node
现在,当您运行docker image时,它将以正常节点用户模式运行