我正在运行最新版本的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很好。


当前回答

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

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

docker build -t mysql:5.7 .

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

其他回答

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

Docker在其官方文档中写道:

并非所有映像都可用于ARM64体系结构。你可以添加 ——linux/amd64平台在模拟下运行Intel映像。在 特别的,mysql映像在ARM64中不可用。你可以工作 通过使用mariadb映像来解决这个问题。

(源)

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

它看起来是这样的:

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

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

看看这篇github帖子

因为“Oracle只提供预编译的Arm64”二进制文件,所以你有了它

mysql:8.0-oracle

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

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

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

services:

  mysql:
    platform: linux/amd64