Docker(Apple Silicon/M1 预览)MySQL "no matching manifest for linux/arm64/v8 in the manifest list entries"

Docker (Apple Silicon/M1 Preview) MySQL "no matching manifest for linux/arm64/v8 in the manifest list entries"

我正在 运行使用 Docker Apple Silicon Preview. 的最新版本 我创建了教程 container/images 并且运行良好。当我去创建自定义 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。

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

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

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

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

这两种方式都适用于 Docker 预览

的 M1

我有一个类似的问题,通过我的 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

在您的 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

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"

对于努力让它与特定版本一起工作的任何人,以下内容对我不起作用:

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

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

services:

  mysql:
    platform: linux/amd64

可以尝试 start/run 一个容器(对于 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 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 支持。

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

使用以下命令构建它(命名与官方 mysql:5.7 图像相同)默认情况下,所有 docker-compose 配置或指定 mysql:5.7.

docker build -t mysql:5.7 .

这意味着您不会再从官方 MySQL Dockerhub 存储库获得更新,但作为临时替代品,我发现它很有用。

Docker 在其官方文档中说:

Not all images are available for ARM64 architecture. You can add --platform linux/amd64 to run an Intel image under emulation. In particular, the mysql image is not available for ARM64. You can work around this issue by using a mariadb image.

(来源here

因此,要使您的项目正常运行,您应该做的是将 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

看看他的githubpost

由于“Oracle 仅提供 pre-compile Arm64”二进制文件,因此您可以使用

图片 --> mysql:8.0-oracle

docker run -d --name mysql-8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<your_password> mysql:8.0-oracle

在 docker 命令中更改平台

参数:--平台linux/x86_64

这适用于因同一问题而来到这里但 ibmcom/db2

的任何人

您可以使用以下命令拉取 db2 镜像

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