164

我正在运行最新版本的Docker Apple Silicon Preview。我创建了教程容器/图像,它工作正常。当我去创建一个自定义 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。

4

12 回答 12

324

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

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

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

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

两种方式都适用于我在 M1 上的 Docker 预览版

于 2021-01-06T09:04:24.767 回答
120

m1 mac 的同样问题只需运行此命令

docker pull --platform linux/x86_64 mysql
于 2021-05-02T21:12:00.570 回答
45

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

services:

  mysql:
    platform: linux/amd64
    ports:
于 2021-08-15T12:24:03.850 回答
39

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
于 2021-02-12T05:34:03.383 回答
19

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

FROM ubuntu:18.04

FROM --platform=linux/x86_64 ubuntu:18.04
于 2021-01-24T22:14:35.380 回答
10

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

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
于 2021-04-28T22:03:04.523 回答
8

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

docker run -d -p 3306:3306 --name mysql --platform linux/x86_64 --env MYSQL_ROOT_PASSWORD=12345 mysql
于 2021-11-12T01:54:06.420 回答
7

Docker 在其官方文档中说:

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

(来源在这里

所以你应该做的是让你的项目工作是添加platform: linux/amd64到你的 docker-compose.yml 中。

它看起来像:

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

正如您可以想象的那样,性能可能会有所不同。

于 2022-01-18T13:01:40.990 回答
6

有关已知问题,请参阅以下链接。在你的 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"
于 2021-04-12T08:52:21.213 回答
0

请注意,--platform linux/x86_64在 arm64/v8 上使用时,您可能会失去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 支持。

于 2022-01-09T21:43:22.413 回答
0

这个Github存储库允许构建 MySQL 5.7 aarch64 映像。

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

docker build -t mysql:5.7 .

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

于 2022-01-13T12:59:17.833 回答
0

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

于 2022-02-04T06:50:08.910 回答