相同Dockerfile在Ubuntu 22.04构建失败,Ubuntu 20.04正常求助
问题分析与解决方案
问题核心
你遇到的是Docker版本差异导致的文件系统权限兼容性问题:Ubuntu 22.04上的Docker 20.10.24默认启用了overlay2存储驱动的metacopy特性,该特性与ruby:3.1.4-buster(基于Debian Buster)镜像中的apt upgrade操作存在冲突,触发了Python缓存文件写入权限拒绝错误。旧版本Docker(20.10.12)未启用该特性,因此构建正常。
解决方案
方案1:避免全量apt upgrade(推荐)
ruby:3.1.4-buster是官方维护的稳定基础镜像,全量升级不仅无必要,还易引入兼容性问题。修改Dockerfile如下:
FROM ruby:3.1.4-buster # 仅更新包索引,按需安装特定包即可 RUN apt update
方案2:临时调整权限后执行升级
如果业务必须执行全量升级,可在apt upgrade前手动创建Python缓存目录并开放权限:
FROM ruby:3.1.4-buster RUN mkdir -p /usr/lib/python3.7/__pycache__ && chmod 777 /usr/lib/python3.7/__pycache__ \ && apt update && apt upgrade -y
方案3:禁用Docker的metacopy特性
修改Ubuntu 22.04上的Docker daemon配置,关闭overlay2的metacopy特性:
- 编辑
/etc/docker/daemon.json文件,添加以下内容:
{ "storage-driver": "overlay2", "storage-opts": [ "overlay2.metacopy=off" ] }
- 重启Docker服务:
sudo systemctl restart docker
之后重新执行构建即可正常完成。
内容的提问来源于stack exchange,提问作者LewlSauce
相关产品推荐
相关产品推荐

