Docker (Apple Silicon/M1预览版)MySQL“在清单列表条目中没有匹配linux/arm64/v8的清单”;

我正在运行Docker苹果硅预览。的最新版本,我创建了教程容器/图像,它工作正常。当我去创建一个自定义YAML文件并运行docker-compose时,我在拉mysql时得到以下错误:

错误:在清单列表条目中没有匹配linux/arm64/v8的清单

下面是我YAMl文件中的一个片段:

version: '3'


services:
# Database
db:
image: mysql-server:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: wp
MYSQL_USER: wp
MYSQL_PASSWORD: wp
networks:
- wpsite

我尝试了:latest和:8,结果是相同的错误。它拉phpmyadmin和wordpress很好。

257732 次浏览

好吧,从技术上讲,它不会解决你的问题(在ARM上运行MySQL),但暂时,你可以添加platform到你的服务,如:

services:
db:
platform: linux/x86_64
image: mysql:5.7
...

或者,考虑使用MariaDB,它应该作为一个替代物,例如:

services:
db:
image: mariadb:10.5.8
...

这两种方法都适用于我在M1上的Docker预览

我有一个类似的问题,解决了这一行在我的dockerfile:

之前

FROM ubuntu:18.04

FROM --platform=linux/x86_64 ubuntu:18.04
Oracle为arm64维护了MySQL 8.0.23 docker镜像。
https://hub.docker.com/r/mysql/mysql-server < / p >

在docker-compose文件中使用它

version: "3.8"
services:
mysql:
container_name: mycontainername
image: mysql/mysql-server:8.0.23
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydatabasename
MYSQL_ROOT_HOST: "%"
command: --lower_case_table_names=1

请参考以下链接用于已知问题。在你的Mac终端运行

softwareupdate --install-rosetta

然后在docker-compose中有一些类似的东西

mysql_gdpr:
platform: linux/x86_64
image: mysql/mysql-server:8.0.23
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: "user_security"
MYSQL_RANDOM_ROOT_PASSWORD: 1
MYSQL_USER: "security"
MYSQL_PASSWORD: "pleasechangeit"

对于那些努力使用特定版本的人来说,下面的方法对我来说并不适用:

docker run --platform linux/x86_64 mysql:5.7.26 -e MYSQL_ROOT_PASSWORD=pass

但这确实起了作用:

 docker run --platform linux/x86_64 mysql:5.7 -e MYSQL_ROOT_PASSWORD=pass

同样的问题,m1 MAC运行这个命令

docker pull --platform linux/x86_64 mysql

这个答案,我将它添加到我的本地docker-compose.override.yml

services:


mysql:
platform: linux/amd64

可以尝试启动/运行容器(适用于MAC m1)

docker run -d -p 3306:3306 --name mysql --platform linux/x86_64 --env MYSQL_ROOT_PASSWORD=12345 mysql

请注意,当在arm64/v8上使用--platform linux/x86_64时,你可能会失去对Linux本机AIO的支持。

查看docker容器日志:

[ERROR] [MY-012585] [InnoDB] Linux Native AIO interface is not supported on this platform. Please check your OS documentation and install appropriate binary of InnoDB.
[Warning] [MY-012654] [InnoDB] Linux Native AIO disabled.

考虑使用mysql / mysql服务器代替,因为它有arm64/v8的开箱支持。

Github回购允许构建一个MySQL 5.7 aarch64镜像。

用下面的命令构建它(命名它与正式的mysql:5.7镜像相同),它将在默认情况下被所有指定mysql:5.7的docker-compose配置或dockerfile使用。

docker build -t mysql:5.7 .

这意味着你将不再有来自官方MySQL Dockerhub回购的更新,但作为一个临时的替代品,我发现它很有用。

Docker在其官方文档中写道:

并非所有映像都可用于ARM64架构。你可以添加 --platform linux/amd64在模拟下运行英特尔映像。在 特别的,mysql映像在ARM64中不可用。你可以工作

(源在这里)

因此,要使项目工作,你应该做的是将platform: linux/amd64添加到docker-compose.yml中。

它看起来是这样的:

services:
mysql:
image: mysql:5.7
platform: linux/amd64
...

你可以想象,表演可能会不一样。

在模拟下的M1机器上运行x86容器的尝试可能会崩溃。即使容器在模拟下正确运行,它们也会比本机等效容器更慢,并使用更多内存。从这里https://docs.docker.com/desktop/mac/apple-silicon/#known-issues

这在mac M1中为我工作,在服务中指定平台密钥。

services:
mysql:
platform: linux/amd64
image: mysql:latest
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
ports:
- 3306:3306

我在M1 Pro上也遇到过这个问题,对我来说,解决这个问题最稳定的方法是在Docker引擎设置中禁用buildkit,这意味着设置为false而不是默认的true。这里还有一个悬而未决的问题https://github.com/docker/for-mac/issues/5873

看看他的github 帖子

由于“Oracle只提供预编译的arm64”;二进制,你有

图像——比;mysql: 8.0甲骨文

docker run -d——name mysql-8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<mysql: 8.0甲骨文

在docker命令中修改平台

参数:——平台linux/x86_64

这是为任何在这里遇到相同问题但使用ibmcom/db2的人准备的

可以使用下面的命令拉出db2映像

docker pull --platform linux/x86_64 ibmcom/db2:latest

使用下面的图片解决了我的问题。

mysql/mysql-server:8.0.23

在你的Dockerfile for mysql,如果你有以下

FROM mysql:8.0.28

改为

FROM --platform=linux/x86_64 mysql:8.0.28

因为Apple M1中的Docker会寻找一个ARM映像,而MySQL不发布ARM映像,所以这就是为什么你会得到

无法用前端dockerfile解决。v0:创建LLB失败 定义:manifest中没有匹配的平台

使用--platform标志,即使我们在ARM处理器中,我们也在告诉docker我们想要使用x86_64映像