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

Qiu*_*ang 3 umask docker dockerfile

我希望 docker 中的某个目录具有特定的 umask 值,例如 000。我尝试在 dockerfile 和 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
...
Run Code Online (Sandbox Code Playgroud)

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

/var/www/html # cd storage/logs/
/var/www/html/storage/logs # umask
0022
Run Code Online (Sandbox Code Playgroud)

这是为什么?我该如何让它发挥作用?谢谢!

Dav*_*aze 6

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

如果您尝试使非 root 用户可写入目录,最好的选择是将该目录授予chown该用户。(在 Ask Ubuntu 上如何为特定文件夹设置 umask有一些进一步的选择。)如果目录最终是绑定挂载点或卷挂载点,那么这些都无关紧要;挂载目录的所有特征都将替换 Dockerfile 中发生的任何内容。

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

#!/bin/sh
# entrypoint.sh
umask 000
# ... other first-time setup ...
exec "$@"
Run Code Online (Sandbox Code Playgroud)