【问题标题】:Docker-compose: Mounting a tmpfs usable by non-root userDocker-compose:挂载非 root 用户可用的 tmpfs
【发布时间】:2018-11-27 11:11:30
【问题描述】:

我正在创建 docker 映像,稍后将在具有严格设置的 Kubernetes 上使用:

  1. 只读文件系统
  2. 非root用户

出于测试目的,我可以在 docker-compose 配置中使用 read_only: true 模拟 1)。然后,我必须为具有写入活动的位置添加一些目录,例如 /run 和 /var。但是如果我尝试使用here 所示的 tmpfs,则该目录归 root 所有:

drwxr-xr-x 2 root root 40 Nov 27 11:05 /var

有没有秘密选项可以使它成为drwxrwxrwx?是否有替代方案(除了普通磁盘目录)?

跑步:

  • Docker 版本 18.06.0-ce
  • docker-compose 版本 1.8.0
  • Ubuntu 16.04

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    你可以指定一个tmpfs模式:

    docker run -d \
      -it \
      --name tmptest \
      --mount type=tmpfs,destination=/app,tmpfs-mode=1770 \
      nginx:latest
    

    https://docs.docker.com/storage/tmpfs/#specify-tmpfs-options


    使用较旧的 2.x 撰写文件语法,您可以像这样指定它:

    version: "2.4"
    services:
      my_app:
        image: my_app
        read_only: true
        restart: always
        tmpfs:
          - /run:mode=770,size=1k,uid=200,gid=10000
    

    https://github.com/docker/cli/issues/698#issuecomment-429688027


    对于 3.x 语法,使用长格式卷定义,您需要关注这个问题:

    https://github.com/docker/cli/issues/1285

    【讨论】:

    • mode 参数似乎被忽略了,但 uid 一个有效,所以我可以让事情顺利进行。奇怪的是,我创建的两个 tmpfs 上的标志并不相同:drwxr-xr-x 代表 /var/httpd 和 drwxrwx--- 代表 /run/httpd。
    • @xenoid 我个人对此类问题的解决方案通常是在容器内以 root 身份启动入口点,修复任何文件权限和 uid,然后执行 exec gosu 以从 root 删除到用户.然后容器以用户身份有效运行,但并非每个安全团队都接受该选项。
    • 不幸的是,我有这样一个安全团队:) 但是因为我可以设置 UID,所以我不需要修复访问权限。
    • 情节扭曲:mode= 今天早上工作,在我删除了 Dockerfile 中的 RUN chown ... 之后...
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 2019-08-19
    • 2017-06-13
    • 2019-07-10
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 2019-04-10
    相关资源
    最近更新 更多