Docker (Apple Silicon/M1 Preview) MySQL "no matching manifest for linux/arm64/v8 in the manifest list entries"
MysqlDockerApple SiliconMysql Problem Overview
I'm running the latest build of the Docker Apple Silicon Preview. I created the tutorial container/images and it works fine. When I went to create a custom YAML file and run docker-compose I get the following error when pulling mysql:
ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries
Here is a snippet from my YAMl file:
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
I've tried :latest and :8 which result in the same error. It pulls phpmyadmin and wordpress fine.
Mysql Solutions
Solution 1 - Mysql
Well, technically it will not solve your issue (running MySQL on ARM), but for the time being, you could add platform
to your service like:
services:
db:
platform: linux/x86_64
image: mysql:5.7
...
Alternatively, consider using MariaDB, which should work as a drop-in replacement like e.g. this:
services:
db:
image: mariadb:10.5.8
...
Both ways work for me on M1 with the Docker Preview
Solution 2 - Mysql
same problem for m1 mac just run this command
docker pull --platform linux/x86_64 mysql
Solution 3 - Mysql
From this answer, I added this to my local docker-compose.override.yml
services:
mysql:
platform: linux/amd64
Solution 4 - Mysql
Oracle maintains a MySQL 8.0.23 docker image for arm64.
https://hub.docker.com/r/mysql/mysql-server
To use it in your docker-compose file
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
Solution 5 - Mysql
Docker on its official documentation says:
> Not all images are available for ARM64 architecture. You can add
> --platform linux/amd64
to run an Intel image under emulation. In
> particular, the mysql image is not available for ARM64. You can work
> around this issue by using a mariadb image.
(source here)
So what you should do to make your project work is to add platform: linux/amd64
to your docker-compose.yml.
It would look like:
services:
mysql:
image: mysql:5.7
platform: linux/amd64
...
As you can imagine probably the performance won't be the same.
Solution 6 - Mysql
I had a similar issue, solved with this line in my dockerfile:
before
FROM ubuntu:18.04
after
FROM --platform=linux/x86_64 ubuntu:18.04
Solution 7 - Mysql
For anyone struggling to make it work with a specific version, the following didn't work for me:
docker run --platform linux/x86_64 mysql:5.7.26 -e MYSQL_ROOT_PASSWORD=pass
but this did:
docker run --platform linux/x86_64 mysql:5.7 -e MYSQL_ROOT_PASSWORD=pass
Solution 8 - Mysql
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
Solution 9 - Mysql
can try start/run a container (for mac m1)
docker run -d -p 3306:3306 --name mysql --platform linux/x86_64 --env MYSQL_ROOT_PASSWORD=12345 mysql
Solution 10 - Mysql
Please refer to the following link for known issues. In your Mac's terminal run
softwareupdate --install-rosetta
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"
Solution 11 - Mysql
Look at his github post
Since "Oracle only supplies pre-compile Arm64" binaries, you have it there with
Image --> mysql:8.0-oracle
> docker run -d --name mysql-8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=
Solution 12 - Mysql
Please note that when using --platform linux/x86_64
on arm64/v8 you may lose Linux Native AIO support.
Check out the docker container logs:
[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.
Consider using mysql/mysql-server instead, as it has arm64/v8 support out of the box.
Solution 13 - Mysql
This Github repo allows to build a MySQL 5.7 aarch64 image.
Building it with the following command (naming it the same as the official mysql:5.7 image) it will be used by default by all your docker-compose configurations or Dockerfiles that specify mysql:5.7.
docker build -t mysql:5.7 .
It means that you won't have updates from the official MySQL Dockerhub repo anymore, but as a temporary drop-in replacement I find it useful.
Solution 14 - Mysql
I've also encountered this issue on M1 Pro and to solve the most stable way for me was to disable buildkit in the Docker engine settings, meaning setting to false instead the default true. There is also an open issue here https://github.com/docker/for-mac/issues/5873
Solution 15 - Mysql
Attempts to run x86 containers on M1 machines under emulation can crash. Even when the containers do run correctly under emulation, they will be slower and use more memory than the native equivalent. From here https://docs.docker.com/desktop/mac/apple-silicon/#known-issues
Solution 16 - Mysql
Change the platform in docker command
Param : --platform linux/x86_64