Docker (Apple Silicon/M1 Preview) MySQL «нет соответствующего манифеста для linux/arm64/v8 в записях списка манифеста»

Я запускаю последнюю сборку 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.

И есть ли у сопровождающих MySQL образ для этой архитектуры?

jonrsharpe 26.12.2020 14:22

Там только образы amd64... Теги mysql \- Docker Hub

Akihito KIRISAKI 26.12.2020 14:40

Странно, я считаю, что MySQL поддерживает ARM Источник: mysqlonarm.github.io/Running-MySQL-on-ARM

Sam 26.12.2020 14:58

@AkihitoKIRISAKI hub.docker.com/r/mysql/mysql-server/… (сервер) выглядит так же, но это будет установлено.

Sam 26.12.2020 15:01

Версия @Sam mysql-server:5.7 слишком старая для поддержки arm64! hub.docker.com/layers/mysql/mysql-server/5.7/images/…

Akihito KIRISAKI 26.12.2020 15:09

Там, где доступно изображение linux/amd64, я считаю, что это основная проблема: github.com/containerd/containerd/issues/3225

Aidan Feldman 11.02.2023 01:08

Оформить второй ответ stackoverflow.com/a/67361161/316343 если вы не ищете конкретно mysql.

Jahan Zinedine 11.02.2023 19:32
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
382
7
330 582
23
Перейти к ответу Данный вопрос помечен как решенный

Ответы 23

Ответ принят как подходящий

Ну, технически это не решит вашу проблему (запуск MySQL на ARM), но пока вы можете добавить platform к своему сервису, например:

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

В качестве альтернативы рассмотрите возможность использования MariaDB, которая должна работать как замена, например, например. этот:

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

Оба способа работают для меня на M1 с Docker Preview

То же самое я сделал для изображения «percona» (mysql на стероидах). Спасибо!

Shyam 09.01.2021 20:14
docs.docker.com/docker-for-mac/apple-m1 Я вижу, что документация была обновлена, чтобы включить инструкции по работе в режиме эмуляции (флаг платформы linux/amd64) и поощрить поддержку mariadb.
Sam 25.01.2021 04:54

Для докера (без компоновки) вы можете сделать: docker run --platform linux/x86_64 mysql который также загружает и запускает правильные изображения на M1. Спасибо большое за этот пост!

JasonD 01.02.2021 02:30

Могу ли я предложить вам изменить версию MySQL на 8? Правка слишком короткая для отправки

jibeeeee 09.02.2021 22:29

Есть ли способ установить изображение на основе текущей арки в файле компоновки докера? Скажем, использовать mysql, если работаете на x86, или использовать mariadb, если работаете на руке?

cumanzor 10.03.2021 18:21

@jibeeeee, исходный вопрос задавался о mysql5.7 . Вероятно, вы можете просто использовать mysql-server:8.0 или любую другую версию, которую вы предпочитаете.

Ben Wheeler 19.03.2021 14:49

Могут ли наши работодатели с Intel i7 использовать ту же конфигурацию?

Alex Shtromberg 29.07.2021 17:56

@AlexShtromberg - это должно работать и на машинах Intel, так как это архитектура x86 ...

Stefan W 01.08.2021 08:32

Отлично работал с Mac OS под управлением Apple Silicon M1. Спасибо!

Renoir Reis 07.09.2021 18:26

Альтернатива, которую вы предложили, mariadb контейнер отлично работал, яблочный силикон / рука

CDM social medias in bio 27.09.2021 20:32

Добавление platform: linux/x86_64 решило проблему для меня на M1 Mac.

Porter Lyman 09.10.2021 04:42

Поскольку это кажется принятым ответом, я хотел добавить, что обновление версии до чего-то вроде mysql:5.7.34 уже может решить проблему. У меня установлена ​​rosetta2 и докер с поддержкой m1.

chAlexey 08.11.2021 14:34

MariaDB больше не является заменой. Начиная с MySQL 5.7, версии отклоняются до такой степени, что восстановление дампов, сделанных с помощью mysqldump в MySQL 5.7, больше не будет восстанавливаться в MariaDB. См., например. stackoverflow.com/questions/54875134/…

Stijn de Witt 13.01.2022 11:11

это решение добавить платформу в docker-compose идеально, просто и решает мою проблему

Edson Filho 28.04.2022 20:26

у меня была такая же проблема с изображением сонаркуба, и это работает для меня

LEONARDO PEREIRA RODRIGUES 22.07.2022 15:28

FWIW, ни этот, ни какой-либо из ответов на этот вопрос не сработали для меня (я получил ту же ошибку, что и ОП). Моя машина M1 MBP с чипом M1 Max. Что касается моего личного опыта, то запустить MySQL под Docker, как с эмуляцией, так и без нее, в конце 2022 года по-прежнему невозможно. Мне трудно поверить, что никому не удалось успешно скомпилировать и опубликовать MySQL для M1.

Aquarelle 05.09.2022 23:09

Я попытался использовать это решение в своем файле для создания докеров, но мое приложение CMS локально было очень медленным, а страницы занимали более 10 секунд. для загрузки (также рабочий стол докера показал, что у меня может быть медленная производительность с этим контейнером)... Затем я удалил платформу, обновился до MySQL 8, и для меня не было проблем - он снова загружается за десятки миллисекунд...

dkocich 24.11.2022 12:41

У меня возникла такая же проблема с моим компьютером Mac M2, и это решило ее.

Tito Lulu 12.01.2023 14:38

Оформить заказ stackoverflow.com/a/67361161/316343 если вы не ищете конкретно mysql.

Jahan Zinedine 11.02.2023 19:32

У меня была аналогичная проблема, решенная с помощью этой строки в моем файле докеров:

до

FROM ubuntu:18.04

после

FROM --platform=linux/x86_64 ubuntu:18.04

Это отлично сработало, вам просто нужно добавить это в свой файл докера mysql для laradock FROM --platform=linux/x86_64 mysql:${MYSQL_VERSION}

Louwki 05.06.2021 21:40

Oracle поддерживает образ докера MySQL 8.0.23 для arm64.
https://hub.docker.com/r/mysql/mysql-сервер

Чтобы использовать его в файле 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

Работал как часы, Mac Mini M1, спасибо!

csaborio 26.08.2021 07:43

Я также использовал command: --default-authentication-plugin=mysql_native_password на основе stackoverflow.com/a/52789430/332798

tmm1 22.03.2022 23:23

работал нормально для меня. Макбук Про М1

Pedro Soares 01.04.2022 04:23

Работал на меня. Mac Air M1 2020 Биг Сур. Я попробовал выбрать ответ, но меня предупредили, что эмуляция linux/x86_64 может привести к ошибкам или накладным расходам памяти. Большое спасибо.

Écio Silva 08.06.2022 00:06

Это не сработало для меня вообще. Я получил ту же ошибку («нет соответствующего манифеста для linux/arm64/v8 в записях списка манифеста»), что и OP. Я также попытался установить платформу на «linux/amd64», «linux/x86_64» и «linux/x86_64/v8» и все равно получил ту же ошибку. Похоже, запустить MySQL под Docker с эмуляцией и без нее по-прежнему невозможно даже в сентябре 2022 года. Не могу поверить, что никто нигде не скомпилировал MySQL для M1.

Aquarelle 05.09.2022 23:02

@Aquarelle явно что-то не так с вашей настройкой, потому что я и многие другие отлично запускаем MySQL (с эмуляцией и без нее) на процессорах Apple M1. Если бы вы потратили время на чтение Dockerfile для образа, о котором я упоминал выше, вы бы увидели, что Oracle явно говорит, что он скомпилирован для ARM. hub.docker.com/r/mysql/mysql-сервер

bpossolo 07.09.2022 00:58

@bpossolo Простите гневную тираду. Я могу даже удалить свой комментарий, если это возможно. Проблема была полностью в PEBKAC (я указывал docker compose на старый, устаревший файл компоновки в сценарии оболочки, и я понял это только пару часов назад, после чего я фейспалмил, а затем обновил скрипт). Теперь все работает прекрасно. Извини!

Aquarelle 08.09.2022 02:00

рад, что ты разобрался!

bpossolo 09.09.2022 20:39

Перейдите по следующей ссылке, чтобы узнать об известных проблемах. В терминале вашего 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"

Просто добавление platform: linux/x86_64 делает свое дело.

Shreyansh Panchal 02.07.2021 08:09

Розетта - это то, что нужно, спасибо! docs.docker.com/docker-for-mac/apple-silicon

DevJ3rry 13.08.2021 08:25

Для тех, кто пытается заставить его работать с определенной версией, у меня не сработало следующее:

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

такая же проблема для m1 mac просто запустите эту команду

docker pull --platform linux/x86_64 mysql

работало на mac mini m1, хотя мне пришлось добавить v8: linux/x86_64/v8

Marko 22.08.2021 18:37

У меня работал MacBook Pro (13 дюймов, M1, 2020 г.)

Pravanjan 27.09.2021 11:38

Также работало у меня на M2: export DOCKER_DEFAULT_PLATFORM=linux/x86_64/v8

btraas 16.03.2023 06:16

Из этого ответа я добавил это в свой локальный docker-compose.override.yml

services:

  mysql:
    platform: linux/amd64

это действительно сделало это для меня. м1 про 14''

Yala Yala Herzlin 27.01.2022 02:10

M1 pro, пробовал ответы выше, не повезло, но этот сработал для меня

Dylan Glockler 17.06.2022 18:40

Я также изменил версию mysql 5.7.22 на 5.7.

Morgenstern 01.07.2022 12:40

Не работает для меня

Aquarelle 07.09.2022 02:21

работал на простом Apple Silicon M1

Pathros 26.01.2023 21:31

можно попробовать запустить/запустить контейнер (для mac m1)

docker run -d -p 3306:3306 --name mysql --platform linux/x86_64 --env MYSQL_ROOT_PASSWORD=12345 mysql

Обратите внимание, что при использовании --platform linux/x86_64 на arm64/v8 вы можете потерять поддержку Linux Native AIO.

Проверьте журналы контейнера докеров:

[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 из коробки.

Этот репозиторий Github позволяет создать образ MySQL 5.7 aarch64.

Создайте его с помощью следующей команды (назовите его так же, как официальный образ mysql: 5.7), он будет использоваться по умолчанию всеми вашими конфигурациями docker-compose или файлами Docker, которые указывают mysql: 5.7.

docker build -t mysql:5.7 .

Это означает, что у вас больше не будет обновлений из официального репозитория MySQL Dockerhub, но в качестве временной замены я считаю его полезным.

Докер в своей официальной документации говорит:

Не все образы доступны для архитектуры ARM64. Можете добавить --platform linux/amd64 для запуска образа Intel в режиме эмуляции. В в частности, образ mysql недоступен для ARM64. Вы можете работать вокруг этой проблемы с помощью изображения mariadb.

(источник здесь)

Итак, чтобы ваш проект заработал, вам нужно добавить platform: linux/amd64 в файл docker-compose.yml.

Это будет выглядеть так:

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

Как вы можете себе представить, вероятно, производительность не будет такой же.

Попытки запустить контейнеры x86 на машинах M1 в режиме эмуляции могут привести к сбою. Даже если контейнеры работают корректно в режиме эмуляции, они будут работать медленнее и использовать больше памяти, чем собственный эквивалент. Отсюда https://docs.docker.com/desktop/mac/apple-silicon/#known-issues

Это работает для меня в Mac M1, указывая ключ платформы внутри службы.

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

Я также столкнулся с этой проблемой на M1 Pro, и наиболее стабильным способом решения для меня было отключить buildkit в настройках движка Docker, что означает установку значения false вместо значения по умолчанию true. Здесь также есть открытая проблема https://github.com/docker/for-mac/issues/5873

Посмотрите на этот пост на гитхабе

Поскольку «Oracle поставляет только предварительно скомпилированные двоичные файлы Arm64», у вас есть это с

Изображение --> mysql:8.0-оракул

docker run -d --name mysql-8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<ваш_пароль> mysql:8.0-oracle

Изменить платформу в команде docker

Параметр: --platform linux/x86_64

Это для тех, кто здесь по той же проблеме, но с ibmcom/db2

Вы можете использовать приведенную ниже команду, чтобы получить образ db2.

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

Использование этого изображения ниже решило мою проблему.

mysql/mysql-server:8.0.23

В вашем Dockerfile для mysql, если у вас есть следующее

FROM mysql:8.0.28

изменить его на

FROM --platform=linux/x86_64 mysql:8.0.28

потому что Docker в Apple M1 будет искать образ ARM, а MySQL не публикует образы ARM, поэтому вы получаете

не удалось решить с помощью внешнего интерфейса dockerfile.v0: не удалось создать LLB определение: не соответствует платформе в манифесте

с флагом --platform, несмотря на то, что мы находимся в процессоре ARM, мы говорим докеру, что хотим использовать изображение x86_64

У меня чип М1.

Сегодня я обнаружил, что это отлично работает в последней основной ветке KSQL. Вот команды

git clone https://github.com/confluentinc/ksql.git
cd ksql
docker-compose up -d

Он волшебным образом вызывает Zookeeper, три экземпляра сервера Kafka, реестр схем и интерфейс командной строки.

Ссылка: Руководство по докеру KSQLDB

Чтобы решить эту проблему, нам нужно передать платформу со значением в ваш образ/файл докера.

Используя файл docker-compose.yaml:

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

Использование файла Docker:

FROM --platform=linux/x86_64 mysql:5.7

Использование команды docker pull:

docker pull --platform=linux/x86_64 mysql:5.7

Используя параметр DOCKER_DEFAULT_PLATFORM:

export DOCKER_DEFAULT_PLATFORM=linux/x86_64

Некоторые из других известных платформ: linux/amd64, linux/arm64 и т. д.

  • В моем чипе M1-Pro сработала эта команда.

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

Вам просто нужно указать платформу после указания образа. Работает на процессоре 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 

Другие вопросы по теме