docker 容器上已安装卷中的 Creating/generating 个文件属于普通用户而非 root

Creating/generating files in a mounted volume on docker container own to regular user and not to root

问题:无法在 docker 中不属于 root 的已安装卷上 generate/create 文件。当我创建用户并将其推送到 docker-compose 时抛出权限被拒绝的错误。

场景:

version: '3.4'
services:
  app:
    image: ubuntu:latest
    command: /home/john/clone_repository_and_generate_reports.sh 
    volumes:
      - "/home/john/:/home/john/"
    environment:
      - NODE_ENV=production
    env_file:
      - ./.config.env

预期行为:克隆了 github 存储库并生成了属于 john 不属于 的文件 root.

在 docker 上处理权限问题的正确方法是什么? 我怎样才能将这些文件保存在这个已安装卷上的 john 用户下?

为用户设置规则,因此: user: john

这在此处记录: https://docs.docker.com/compose/compose-file/compose-file-v3/#domainname-hostname-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir

解决方案:我们需要在用户范围内运行 docker 编写脚本,并使用用户 ID 和组 ID 约定推送 user 属性("uid:gid").

示例:运行特定用户的命令sudo -iu john 和 运行 docker-compose 函数:USER_INFO=$(id -u):$(id -g) docker-compose up --build --force-recreate -d

组成文件结构:

version: '3.4'
services:
  app:
    image: ubuntu:latest
    command: /home/john/clone_repository_and_generate_reports.sh 
    volumes:
      - "/home/john/:/home/john/"
    environment:
      - NODE_ENV=production
    env_file:
      - ./.config.env
    user: "${USER_INFO}"