在docker容器上的已装入卷中创建/生成文件属于普通用户,而不是root用户



问题:无法在docker中非root用户拥有的已装入卷上生成/创建文件。当我创建并将我的用户推到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
  • 我的docker-compose.yml文件调用一个简单的bash脚本,该脚本克隆github存储库并在python中生成不同的报告。此外,我希望这些数据对用户john是可访问和持久的,不幸的是,保存的文件仅在root上。

  • 如果我在Dockerfile上添加额外的用户RUN addgroup -S developer && adduser -S john -G developer,则访问docker-compose.yml文件上具有user: john属性的已装入卷会出现权限问题

预期行为:克隆的github存储库和生成的文件归john所有,而不归root所有。

处理docker许可问题的正确方法是什么?如何将john用户下的这些文件保存在此装入的卷上?

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

此处记录了这一点:https://docs.docker.com/compose/compose-file/compose-file-v3/#domainname-主机名-ipc-mac_address-privileged-read_only-shm_size-stdin_open-tty-user-working_dir

解决方案:我们需要在用户作用域上运行docker脚本,并推送具有用户id和组id约定的user属性("uid:gid")。

示例:在特定用户sudo -iu john中运行命令并运行docker组合函数: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}"

最新更新