【问题标题】:Docker mount volume directory permissions to non root user using dockerfileDocker 使用 dockerfile 将卷目录权限安装到非 root 用户
【发布时间】:2019-12-21 14:21:07
【问题描述】:

我有一个带有入口点的 dockerfile,它在 shell 进程中启动一个 java 应用程序 jar。我在入口点之前在 dockerfile 中设置了 USER nobody,以确保入口点 shell 由 none 用户而不是 root 执行。 AWS ECS 上容器的任务定义负责处理卷和挂载参数。因此,理想情况下,在容器运行时主机上的 /var/log/applogs 以相同的路径安装到容器上。但是发生的情况是,由于用户上下文从 root 切换到了 nobody,因此运行容器(执行入口点)的任何人都没有对容器上 /var/log/applogs/ 目录的写权限。因此,应用程序无法在容器上创建日志文件。 我看到的是主机 ec2 /var/log/applogs 被安装在由nobody 用户运行的容器上,但是由于nobody 用户在容器上的此路径上缺少写权限,因此它无法在此处写入应用程序日志. 在 dockerfile 或其他东西上解决此问题的正确方法是什么?

【问题讨论】:

    标签: linux shell dockerfile amazon-ecs docker-entrypoint


    【解决方案1】:

    你可以试试这个……

    从 Dockerfile 中删除 USER nobody 条目并更改您的 以下脚本的入口点:

    #!/bin/bash
    
    # change ownership to user=nobody, group=nobody
    chown -R nobody:nobody /var/log/applogs
    
    # open with sudo a new shell as user nobody and call your application
    sudo -u nobody /bin/bash -c "java -jar /path/to/your/application.jar"
    
    # alternative
    # open with su a new shell as user nobody and call your application
    # su -s /bin/bash -c "java  -jar /path/to/your/application.jar" nobody
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-06
      • 2020-11-21
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 2016-03-25
      • 2022-01-08
      相关资源
      最近更新 更多