docker mysql报错:standard_init_linux.go:228: exec user process caused: exec format error
问题描述:
docker mysql镜像(基础镜像mysql:5.7.31),在windows系统可以正常构建并运行,迁移至麒麟操作系统时,构建时报错:
standard_init_linux.go:228: exec user process caused: exec format error
dockerfile内容:
# 基础镜像
FROM mysql:5.7.31
# author
MAINTAINER whw
# 执行sql脚本
ADD ./db/*.sql /docker-entrypoint-initdb.d/
问题分析:
1、查看Windows主机架构(docker version命令):
2、查看麒麟系统架构:
3、查看mysql:5.7.31基础镜像对应架构:
在hub.docker.com,查询指定mysql:5.7.31版本镜像,如下图示:
从上我们可以看到,mysql:5.7.31基础镜像只有linux/amd64版本,和Windows主机CPU架构一致,故Windows可以正常运行。而麒麟系统CPU架构为linux/arm64,而mysql:5.7.31版本并无arm64版本。
报错原因:
镜像对应的架构(linux/amd64)与麒麟主机对应的架构(linux/arm64)不兼容。
解决方法:
FROM mysql:5.7.31修改为:FROM mysql:8.2.0
由于客户主机CPU架构为linux/arm64,故只能找支持此架构的mysql版本,在hub.docker.com上我们可以发现,mysql8.0最新一些版本开始支持linux/arm64架构,如下图示:
故将mysql基础镜像升级到mysql:8.2.0后,重新构建运行mysql容器,我们发现,mysql容器可以正常运行。
如下图示: