M1芯片更新Docker Desktop 4.2.0后Ubuntu+MySQL镜像构建/bin/sh报错问询
故障根因
- 若你使用的是Arm架构设备(如M系列芯片Mac),Docker更新后QEMU架构模拟的兼容性下降,原来通过模拟运行amd64镜像时,
gnupg、apt-key等加密相关工具会触发段错误 - Node.js 15.x是已停止维护的历史版本,官方Arm架构源已下线,拉取包时会出现校验失败问题
- ondrej/php的PPA源对21.04、22.04等高版本Ubuntu的Arm架构适配不完整,导致PHP7.4依赖无法安装
解决方案1(兼容原有配置,无代码改动风险)
- 第一步:修改Dockerfile首行,直接在基础镜像声明中指定架构,优先级高于docker-compose配置:
FROM --platform=linux/amd64 ubuntu:20.04 - 第二步:在首个
apt-get install命令开头添加apt-utils,避免debconf配置警告:
原命令开头apt-get install -y gnupg gosu curl...修改为apt-get install -y apt-utils gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \ - 第三步:替换所有废弃的
apt-key操作,避免模拟环境下gpg段错误:
原两处apt-key adv导入PHP源密钥的代码替换为:
原Yarn源密钥导入代码curl -fsSL https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xE5267A6C | gpg --dearmor > /etc/apt/trusted.gpg.d/ondrej-php1.gpg \ && curl -fsSL https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC300EE8C | gpg --dearmor > /etc/apt/trusted.gpg.d/ondrej-php2.gpg \curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -替换为:curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor > /etc/apt/trusted.gpg.d/yarn.gpg \ - 第四步:清理缓存重新构建:
执行命令docker-compose build --pull --no-cache
解决方案2(原生Arm架构运行,性能更高)
- 基础镜像使用官方Ubuntu 20.04,无需手动指定架构,Docker会自动拉取适配本地架构的镜像:
FROM ubuntu:20.04 - 替换Node.js 15.x安装源为仍在维护的LTS版本源,把原
curl -sL https://deb.nodesource.com/setup_15.x | bash -替换为:curl -sL https://deb.nodesource.com/setup_16.x | bash - - 为PHP源添加Arm架构标识,原PPA地址声明代码修改为:
echo "deb [arch=arm64] http://ppa.launchpad.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ - 同样按照方案1的步骤替换所有
apt-key操作,清理缓存后重新构建即可
内容的提问来源于stack exchange,提问作者Zeon
相关产品推荐
相关产品推荐

