Docker cp执行时出现Lchown错误但文件仍成功复制
无根模式Docker下
docker cp权限报错的解决办法 问题场景
- 运行环境:Ubuntu 22.04,Docker 24.0.7(无根模式)
- 执行操作:使用
docker cp命令向容器内复制文件,此前在RHEL+Podman环境下正常运行 - 异常现象:命令返回权限错误,但文件已成功复制到容器内,最终由容器root用户拥有,功能上满足需求
错误输出
$ docker cp /home/refriedjello/test 21d77c659def:/root/test -q Error response from daemon: failed to Lchown "/root/test" for UID 999182, GID 701 (try increasing the number of subordinate IDs in /etc/subuid and /etc/subgid): lchown /root/test: invalid argument
相关系统信息
$ id -u 999182 $ whoami refriedjello $ grep ^$(whoami): /etc/subuid refriedjello:296608:65536 $ grep ^$(whoami): /etc/subgid refriedjello:296608:65536
原因解析
无根模式Docker通过/etc/subuid和/etc/subgid给用户分配从属UID/GID范围,用于容器内权限映射。默认执行docker cp时,会尝试将复制的文件权限映射到宿主用户的真实UID(999182),但该UID不在当前用户的从属UID范围(296608~362143)内,导致chown操作失败。不过文件复制动作已完成,容器内root用户自动获得文件权限,因此最终结果符合需求。
可行解决方案
在docker cp命令中添加-a(归档)参数,该参数会保留文件原始权限属性,同时绕开宿主与容器间的UID/GID映射冲突,执行后无报错且文件正常复制:
docker cp -a /home/refriedjello/test 21d77c659def:/root/test -q
内容的提问来源于stack exchange,提问作者refriedjello
相关产品推荐
相关产品推荐

