代码之家  ›  专栏  ›  技术社区  ›  Qiulang

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

  •  0
  • Qiulang  · 技术社区  · 3 年前

    我希望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
    ...
    

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

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

    为什么?我如何使它工作?谢谢

    0 回复  |  直到 3 年前
        1
  •  3
  •   David Maze    3 年前

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

    如果您试图让非root用户写入目录,最好的选择是 chown 将其发送给该用户。( How to set umask for a specific folder 在Ask上,Ubuntu还有一些其他选择。)如果目录最终是绑定装载点或卷装载点,这些都无关紧要;挂载目录的所有特性都将替换Dockerfile中发生的任何事情。

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

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