如何让Docker卷备份文件归属执行命令的非root用户?
解决Docker卷备份文件归属主机用户的方法
下面提供两种无需root权限、无需在容器内创建用户的可行方案:
方案一:直接指定容器进程的UID/GID运行
Docker的--user参数支持直接使用主机用户的UID和GID(不需要容器内存在对应用户),让容器内的tar命令以该身份执行,生成的备份文件自然会归属主机的执行用户。
修改后的命令如下:
docker run --rm \ --user $(id -u):$(id -g) \ -v ./$BACKUPDIR:/backup \ -v docker_wordpress_log_wordpress:/var/www/html \ debian sh -c "/bin/tar -czf /backup/wordpress_$BKTIME.tar.gz /var/www/html"
$(id -u)会获取当前执行命令用户的UID,$(id -g)获取GID- 容器内进程以这个UID/GID运行,写入绑定挂载目录的文件就会继承该身份,无需额外修改权限
方案二:通过主机端重定向生成备份文件
跳过容器内直接写入文件的方式,让容器内的tar将输出发送到标准输出,再由主机端重定向到本地文件。这种方式下,文件由主机用户创建,天然归属执行命令的用户。
命令示例:
docker run --rm \ -v docker_wordpress_log_wordpress:/var/www/html \ debian tar -czf - /var/www/html > ./$BACKUPDIR/wordpress_$BKTIME.tar.gz
tar -czf -表示将打包内容输出到标准输出(-代表stdout)- 主机端的
>重定向操作由当前用户执行,生成的文件直接属于该用户,完全避开容器内的权限问题
内容的提问来源于stack exchange,提问作者bungernut
相关产品推荐
相关产品推荐

