macOS 14.1.1更新后Docker x86交叉构建执行cpan失败
问题:M1 macOS升级后Docker交叉构建AMD64失败(CPAN安装报错)
环境信息
- macOS-M1 14.1.1
- Docker 24.0.6 (build ed223bc)
- 此前ARM64/AMD64交叉构建均正常,系统升级后仅AMD64构建失败
构建命令
build --cache-from thiloj/documentix:buildcache-amd64 --platform=linux/amd64 --cache-to thiloj/documentix:buildcache-amd64 -t t1/test:latest -f Dockerfile.t --load .
Dockerfile内容
FROM ubuntu:22.04 ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update --fix-missing RUN apt-get -y install \ git \ make \ gcc \ wget \ ENV LC_CTYPE=C.UTF-8 RUN cpan CPAN
关键错误日志
31.01 >(error): Could not expand [Makefile.PL]. Check the module name. 31.01 >(error): Skipping Makefile.PL because I couldn't find a matching namespace. 31.77 No 'Makefile' created ANDK/CPAN-2.36.tar.gz 31.77 /usr/bin/cpan Makefile.PL INSTALLDIRS=site -- NOT OK注:手动进入容器执行
cpan CPAN可正常完成
解决思路
- 清理/禁用构建缓存:当前构建复用了旧缓存,可能存在架构不兼容的缓存数据。尝试去掉
--cache-from参数重新构建,或者删除现有缓存镜像后重试。 - 显式指定CPAN非交互式模式:避免自动配置环节的潜在问题,修改Dockerfile中的CPAN安装命令:
或者提前生成CPAN配置文件:RUN echo 'yes' | cpan -i CPANRUN mkdir -p /root/.cpan/CPAN && echo -e "conf auto_commit 1\nconf prerequisites_policy follow" > /root/.cpan/CPAN/MyConfig.pm RUN cpan -i CPAN - 重置QEMU模拟器:Docker交叉构建依赖QEMU,系统升级可能破坏了兼容性。执行以下命令重置QEMU,然后重启Docker:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - 替换CPAN安装方式:改用系统包管理安装perl组件,或手动编译安装CPAN:
用系统包替代:
手动编译安装:RUN apt-get -y install perl-modulesRUN wget -O cpan.tgz http://www.cpan.org/authors/id/A/AN/ANDK/CPAN-2.36.tar.gz && tar zxf cpan.tgz && cd CPAN-2.36 && perl Makefile.PL && make && make install && cd .. && rm -rf CPAN-2.36 cpan.tgz - 禁用BuildKit构建:尝试绕过BuildKit,排查是否是其与QEMU的交互问题:
DOCKER_BUILDKIT=0 docker build --platform=linux/amd64 -t t1/test:latest -f Dockerfile.t --load .
内容的提问来源于stack exchange,提问作者thilo
相关产品推荐
相关产品推荐

