为什么 dockerfile 中的 umask 设置不起作用?

Why is umask setting in dockerfile not working?

我希望我的 docker 中的某些目录具有特定的 umask 值,比如 000。我试图在我的 docker 文件和 ENTRYPOINT shell 脚本中设置它,但他们都失败了,

...
RUN umask 000 /var/www/html/storage/logs //the directory
ENTRYPOINT  ["/etc/start.sh"]

#in the /etc/start.sh
#!/bin/sh
umask 000 /var/www/html/storage/logs
...

当我登录 docker 容器并检查 /var/www/html/storage/logs umask 时,它仍然是默认的 0022

/var/www/html # cd storage/logs/
/var/www/html/storage/logs # umask
0022

这是为什么?我如何让它工作?谢谢!

umask 是 进程 的 属性,而不是目录。与其他与进程相关的特征一样,它将在每个 RUN 命令结束时重置。

如果您试图让非 root 用户可以写入目录,最好的选择是 chown 将它提供给该用户。 (How to set umask for a specific folder 在 Ask Ubuntu 上有一些更进一步的选择。)如果目录最终是绑定挂载点或卷挂载点,None 这将很重要;挂载目录的所有特性将替换 Dockerfile 中发生的任何内容。

如果您确实需要更改 umask,您唯一可以真正做到的地方是在入口点包装器脚本中。主容器进程也可以自己设置。

#!/bin/sh
# entrypoint.sh
umask 000
# ... other first-time setup ...
exec "$@"