Docker 镜像在 m1 处理器中运行

Posted

技术标签:

【中文标题】Docker 镜像在 m1 处理器中运行【英文标题】:Docker image run in m1 processor 【发布时间】:2021-06-02 00:20:06 【问题描述】:

我只能通过 docker preview 在我的 macbook air m1 上玩,我无法通过 docker-compose 文件运行 8.0.22 版本的 mysql 映像。

docker-compose set

我运行的命令是:docker-compose up -d mysql

我该如何解决这个问题?

【问题讨论】:

Ioanni,如果您将docker-compose 部分添加为文本会更好。这样,SO 用户就有更多的可能性会花一些时间尝试重新创建您的问题并提供答案。另见:How to create a Minimal, Reproducible Example 您还可以发布您遇到的任何相关错误吗?请记住,根据 Docker M1 Preview 发行说明here,mysql 没有 ARM64 映像的已知问题 【参考方案1】:

我们刚刚遇到了这个问题,我从this answer 那里得到了解决方案。您可以在 docker-compose 文件中指定您的平台,因此在您的情况下,它看起来像:

services:
  mysql:
    image: mysql:8.0.22
    platform: linux/x86_64
    container_name: mysqldb
    restart: always
    ports:
      - 3306:3306
    volumes:
      - mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=test
      - MYSQL_DATABASE=DATA

在我们公司,我们使用 M1 和 Intel Macs,此解决方案使 mysql 映像可用于两者。

【讨论】:

您使用的是 docker-compose 版本 3 吗?该版本似乎没有平台【参考方案2】:

M1 是 ARMv8 (aarch64) 架构,大部分镜像是 X86 (amd64)。基于bitfmt的整个模拟过程允许从另一个架构运行容器对于Docker for Mac的ARMv8版本仍然不稳定,所以你需要等待一些时间。

解决这个问题的一种方法是为 ARM64 构建您自己的 mysql 映像,从一些 linux 发行版(例如 alpinedebianubuntu)开始并安装 mysql 服务器(相同就像您在裸机安装上所做的那样)。

您可以在标记为ARM64v8 的 docker hub 中找到许多已经可用的容器,因此这可以作为创建映像的良好起点。

【讨论】:

【参考方案3】:

我还在 M1 Mac 上处理 X86 (amd64) 图像。但在您的特定情况下,我建议简单地使用 MariaDB(图像 mariadb)。到目前为止,我尝试的所有东西都与 MySQL 完全兼容,并且 MariaDB 可用于 ARM64。

【讨论】:

【参考方案4】:

您还可以使用mariadb 作为支持 M1 (arm64) 的mysql 的直接替代品:

    mysql:
        restart: unless-stopped
        image: mysql:5.7.14

变成:

    mysql:
        restart: unless-stopped
        image: mariadb:10.2.41

这是 MariaDB 图像的最新标签列表:

https://hub.docker.com/_/mariadb?tab=tags

【讨论】:

以上是关于Docker 镜像在 m1 处理器中运行的主要内容,如果未能解决你的问题,请参考以下文章

Docker-compose 在 M1 mac 上的 VM (Parallels) 中

IDEA快速实现Docker镜像部署运行(for mac M1)

Docker 在 M1 Mac arm64架构上构建 amd64镜像。

ELK 处理来自多个 docker 镜像的多行日志

无法将azure注册表中的docker镜像托管到azure批处理

Docker 拉取镜像失败处理