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命令):

docker-version-win.pngdocker-version-win.png

2、查看麒麟系统架构:

docker-version-kylin.pngdocker-version-kylin.png

3、查看mysql:5.7.31基础镜像对应架构:
在hub.docker.com,查询指定mysql:5.7.31版本镜像,如下图示:

mysql-image-5.7.31.pngmysql-image-5.7.31.png

从上我们可以看到,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-image-8.2.0.pngmysql-image-8.2.0.png

故将mysql基础镜像升级到mysql:8.2.0后,重新构建运行mysql容器,我们发现,mysql容器可以正常运行。

如下图示:

docker-ps-kylin.pngdocker-ps-kylin.png

最后修改于:2023年11月15日 23:58

添加新评论