Docker(Apple Silicon/M1 Preview)MySQL“清单列表条目中没有与 linux/arm64/v8 匹配的清单”

Posted

技术标签:

【中文标题】Docker(Apple Silicon/M1 Preview)MySQL“清单列表条目中没有与 linux/arm64/v8 匹配的清单”【英文标题】:Docker (Apple Silicon/M1 Preview) MySQL "no matching manifest for linux/arm64/v8 in the manifest list entries" 【发布时间】:2021-04-03 23:55:59 【问题描述】:

我正在运行Docker Apple Silicon Preview. 的最新版本,我创建了教程容器/图像,它运行良好。当我去创建一个自定义 YAML 文件并运行 docker-compose 时,我在拉取 mysql 时收到以下错误:

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

这是我的 YAMl 文件中的一个 sn-p:

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。

【问题讨论】:

并且 MySQL 维护人员为该架构推送了一个图像? 只有amd64的图片...mysql Tags \- Docker Hub 奇怪,我相信MySQL支持ARM 来源:mysqlonarm.github.io/Running-MySQL-on-ARM @AkihitoKIRISAKI hub.docker.com/r/mysql/mysql-server/…(服务器)看起来一样,但会安装。 @Sam mysql-server:5.7 版本太旧,无法支持 arm64! hub.docker.com/layers/mysql/mysql-server/5.7/images/… 【参考方案1】:

好吧,从技术上讲,它不会解决您的问题(在 ARM 上运行 MySQL),但目前,您可以将 platform 添加到您的服务中,例如:

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

或者,考虑使用 MariaDB,它应该可以作为直接替代品,例如这个:

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

在 M1 上使用 Docker Preview 两种方式都适用

【讨论】:

我对“percona”图像(类固醇上的mysql)也做了同样的事情。谢谢! docs.docker.com/docker-for-mac/apple-m1 我看到文档已更新,包括在仿真下运行的说明(平台 linux/amd64 标志)并鼓励对 mariadb 的支持。 对于 docker(没有 compose),您可以这样做:docker run --platform linux/x86_64 mysql,它也会在 M1 上拉取并运行正确的图像。非常感谢您的这篇文章! 我可以建议您将 mysql 版本更改为 8 吗?编辑是提交的简称 @AlexShtromberg - 这应该也适用于英特尔机器,因为它是 x86 架构......【参考方案2】:

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

docker pull --platform linux/x86_64 mysql

【讨论】:

在 mac mini m1 上工作,尽管我不得不添加 v8:linux/x86_64/v8 为我工作的 MacBook Pro(13 英寸,M1,2020) 这在我的 MacBook Pro M1 上完美运行【参考方案3】:

Oracle 为 arm64 维护一个 MySQL 8.0.23 docker 映像。https://hub.docker.com/r/mysql/mysql-server

在你的 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 Mimi M1 的工作就像一个魅力,谢谢!【参考方案4】:

来自this answer,我将此添加到我的本地docker-compose.override.yml

services:

  mysql:
    platform: linux/amd64
    ports:

【讨论】:

【参考方案5】:

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

之前

FROM ubuntu:18.04

之后

FROM --platform=linux/x86_64 ubuntu:18.04

【讨论】:

这很好用,您只需将其添加到 laradock 的 mysql docker 文件 FROM --platform=linux/x86_64 mysql:$MYSQL_VERSION【参考方案6】:

对于任何努力使其适用于特定版本的人,以下内容对我不起作用:

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

【讨论】:

【参考方案7】:

Please refer to the following link 已知问题。在你的 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"

【讨论】:

只需添加 platform: linux/x86_64 即可。 Rosetta 是最好的选择,谢谢! docs.docker.com/docker-for-mac/apple-silicon【参考方案8】:

可以尝试启动/运行容器(对于 mac m1)

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

【讨论】:

感谢他的工作【参考方案9】:

Docker 在其官方文档中说:

并非所有映像都可用于 ARM64 架构。你可以加 --platform linux/amd64 在仿真下运行英特尔映像。在 特别是 mysql 映像不适用于 ARM64。你可以工作 通过使用 mariadb 图像解决此问题。

(来源here)

所以你应该做的就是将platform: linux/amd64添加到你的docker-compose.yml中。

看起来像:

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

您可以想象,性能可能会有所不同。

【讨论】:

【参考方案10】:

请注意,在 arm64/v8 上使用 --platform linux/x86_64 时,您可能会失去对 Linux Native 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-server,因为它开箱即用地支持arm64/v8。

【讨论】:

【参考方案11】:

Github repo 允许构建 MySQL 5.7 aarch64 映像。

使用以下命令构建它(将其命名为与官方 mysql:5.7 映像相同),默认情况下,所有指定 mysql:5.7 的 docker-compose 配置或 Dockerfile 都会使用它。

docker build -t mysql:5.7 .

这意味着您将不再有来自官方 MySQL Dockerhub 存储库的更新,但作为临时替代品,我觉得它很有用。

【讨论】:

以上是关于Docker(Apple Silicon/M1 Preview)MySQL“清单列表条目中没有与 linux/arm64/v8 匹配的清单”的主要内容,如果未能解决你的问题,请参考以下文章

在 Apple Silicon M1 Mac 上安装 Cryptography

如何在 Apple Silicon M1 上原生安装 NodeJS?

在 Apple Silicon M1 上使用 Ruby 3.0.2 在 MacOS Monterey 上安装 sqlite3 时出错

如何修复 iOS 模拟器 [native-run] ERR_DEVICE_LOCKED:在 Apple Silicon (M1) 上 1 分钟后设备仍被锁定?

Mac Apple Silicon M1/M2 homebrew miniforge conda pytorch yolov5深度学习环境搭建并简单测试MPS GPU加速

基于Mac Silicon M1 的OpenSSL 编译