问题:无法在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}"