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

Sam*_*Sam 62 mysql docker apple-silicon

我正在运行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 
Run Code Online (Sandbox Code Playgroud)

我试过 :latest 和 :8 导致同样的错误。它可以很好地拉动 phpmyadmin 和 wordpress。

Luk*_*nga 172

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

services:

  mysql:
    platform: linux/amd64
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是为我做的。m1 专业 14 英寸 (2认同)

Ste*_*n W 148

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

services:
  db:
    platform: linux/x86_64
    image: mysql:5.7
    ...
Run Code Online (Sandbox Code Playgroud)

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

services:
  db:
    image: mariadb:10.5.8
    ...
Run Code Online (Sandbox Code Playgroud)

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

  • 对于 docker(不带 compose),您可以执行:`docker run --platform linux/x86_64 mysql`,它也在 M1 上拉取并运行正确的映像。非常感谢你的这篇文章! (27认同)
  • https://docs.docker.com/docker-for-mac/apple-m1/ 我看到文档已更新,包括在仿真(平台 linux/amd64 标志)下运行的说明并鼓励 mariadb 支持。 (4认同)
  • @AlexShtromberg - 这应该也适用于 Intel 机器,因为它是 x86 架构...... (3认同)
  • 这确实有效!:) (2认同)

oct*_*dro 43

Docker 在其官方文档中说道:

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

(来源在这里

因此,要使项目正常运行,您应该做的就是添加platform: linux/amd64到 docker-compose.yml 中。

它看起来像:

services:
    mysql:
        image: mysql:5.7
        platform: linux/amd64
        ...
Run Code Online (Sandbox Code Playgroud)

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


小智 40

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

docker pull --platform linux/x86_64 mysql
Run Code Online (Sandbox Code Playgroud)

  • 在 mac mini m1 上工作,但我必须添加 v8: `linux/x86_64/v8` (18认同)
  • 也在 M2 上为我工作:`export DOCKER_DEFAULT_PLATFORM=linux/x86_64/v8` (17认同)
  • M2 PRO:`导出 DOCKER_DEFAULT_PLATFORM=linux/amd64` (8认同)
  • 适合我的 MacBook Pro(13 英寸,M1,2020) (3认同)
  • 在 m1 空气上工作 (2认同)

cha*_*avy 29

您只需在指定镜像后指定平台即可。使用 M2 处理器

version: '3'

services:
  # Database
  db:
    image: mysql-server:5.7
    platform: linux/amd64 <--------- this line to add
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: pass
      MYSQL_DATABASE: wp
      MYSQL_USER: wp
      MYSQL_PASSWORD: wp
    networks:
      - wpsite 
Run Code Online (Sandbox Code Playgroud)


Ash*_*tri 21

This works for me in mac M1, specifying platform key inside service.

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
Run Code Online (Sandbox Code Playgroud)


Mar*_*n54 19

唯一使用 Mac (M1) 的开发人员

我是团队中唯一拥有 Mac(M1 芯片)的人。所有其他人都有 Windows,所以如果我想在 git 中与其他人兼容,我需要使用一个解决方案来隔离与我的机器相关的配置部分。

该方法

要添加更多配置但使用不同的文件,请docker-compose.mac.yml在与普通文件相同的目录中创建一个新的 docker-compose 文件docker-compose.yml。(可以用任何东西代替 mac 这个词)

代码

version: '2'
services:
  mysql:
    image: mysql:8.0.26
    platform: linux/amd64
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令启动它:

docker-compose -f docker-compose.yml -f docker-compose.mac.yml up
Run Code Online (Sandbox Code Playgroud)

怎么运行的

它将复制docker-compose.yml文件中的所有内容并将其粘贴到docker-compose.mac.yml文件中,但不替换。

在我看来,它在拥有不同计算机的更大团队中非常有用。


bpo*_*olo 15

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
Run Code Online (Sandbox Code Playgroud)


Hug*_*ama 14

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

docker run --platform linux/x86_64 mysql:5.7.26 -e MYSQL_ROOT_PASSWORD=pass
Run Code Online (Sandbox Code Playgroud)

但这确实:

 docker run --platform linux/x86_64 mysql:5.7 -e MYSQL_ROOT_PASSWORD=pass
Run Code Online (Sandbox Code Playgroud)


kho*_*hoi 11

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

docker run -d -p 3306:3306 --name mysql --platform linux/x86_64 --env MYSQL_ROOT_PASSWORD=12345 mysql
Run Code Online (Sandbox Code Playgroud)


Mis*_*awa 10

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

FROM ubuntu:18.04
Run Code Online (Sandbox Code Playgroud)

FROM --platform=linux/x86_64 ubuntu:18.04
Run Code Online (Sandbox Code Playgroud)


Sho*_*obi 10

在你Dockerfile的 mysql 中如果你有以下内容

FROM mysql:8.0.28

将其更改为

FROM --platform=linux/x86_64 mysql:8.0.28

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

无法使用前端 dockerfile.v0 解决:无法创建 LLB 定义:清单中的平台不匹配

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


Vis*_*ath 8

Please refer to the following link for known issues. In your Mac's terminal run

softwareupdate --install-rosetta
Run Code Online (Sandbox Code Playgroud)

and then in docker-compose have something along the lines of

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"
Run Code Online (Sandbox Code Playgroud)

  • 只需添加 `platform: linux/x86_64` 就可以了。 (3认同)

Ran*_*ddy 5

为了解决这个问题,我们需要将具有价值的平台传递到您的 docker 镜像/文件中。

使用docker-compose.yaml文件:

services:
  db:
    platform: linux/x86_64
    image: mysql:5.7
    ...
Run Code Online (Sandbox Code Playgroud)

使用Docker文件:

FROM --platform=linux/x86_64 mysql:5.7
Run Code Online (Sandbox Code Playgroud)

使用docker pull命令:

docker pull --platform=linux/x86_64 mysql:5.7
Run Code Online (Sandbox Code Playgroud)

使用DOCKER_DEFAULT_PLATFORM参数:

export DOCKER_DEFAULT_PLATFORM=linux/x86_64
Run Code Online (Sandbox Code Playgroud)

其他一些知名平台有:等linux/amd64linux/arm64


Man*_*u N 5

  • 在我的 M1-Pro 芯片中,使用此命令。

docker run --platform linux/amd64 --name mysql-5-7 -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -d mysql:5.7


小智 5

我的M1芯片也有类似的问题。这是因为某些映像不\xe2\x80\x99不支持新的 Apple M1 芯片。

\n

如果您在使用 Docker Compose 的 Apple M1 Silicon 芯片上收到此错误“清单列表条目中没有 Linux/arm64/v8 的匹配清单”。

\n

添加平台:linux/amd64在 docker-compose.yml 中

\n

修改上面的yml文件:

\n
version: '3'\n\nservices:\n  # Database\n  db:\n    image: mysql-server:5.7\n    platform: linux/amd64\n    volumes:\n      - db_data:/var/lib/mysql\n    restart: always\n    environment:\n      MYSQL_ROOT_PASSWORD: pass\n      MYSQL_DATABASE: wp\n      MYSQL_USER: wp\n      MYSQL_PASSWORD: wp\n    networks:\n      - wpsite \n
Run Code Online (Sandbox Code Playgroud)\n