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


当前回答

这是为任何在这里遇到相同问题但使用ibmcom/db2的人准备的

可以使用下面的命令拉出db2映像

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

其他回答

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

已知问题请参考以下链接。在你的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"

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

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

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

之前

FROM ubuntu:18.04

FROM --platform=linux/x86_64 ubuntu:18.04