Docker(Apple Silicon/M1 预览)MySQL "no matching manifest for linux/arm64/v8 in the manifest list entries"
Docker (Apple Silicon/M1 Preview) MySQL "no matching manifest for linux/arm64/v8 in the manifest list entries"
我正在 运行使用 Docker Apple Silicon Preview. 的最新版本 我创建了教程 container/images 并且运行良好。当我去创建自定义 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 在 ARM 上),但暂时,您可以将 platform
添加到您的服务中,例如:
services:
db:
platform: linux/x86_64
image: mysql:5.7
...
或者,考虑使用 MariaDB,它应该可以作为替代品,例如这个:
services:
db:
image: mariadb:10.5.8
...
这两种方式都适用于 Docker 预览
的 M1
我有一个类似的问题,通过我的 dockerfile 中的这一行解决了:
之前
FROM ubuntu:18.04
之后
FROM --platform=linux/x86_64 ubuntu:18.04
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
Please refer to the following link 已知问题。在您 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"
对于努力让它与特定版本一起工作的任何人,以下内容对我不起作用:
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
来自 this answer,我将其添加到本地 docker-compose.override.yml
services:
mysql:
platform: linux/amd64
可以尝试 start/run 一个容器(对于 mac m1)
docker run -d -p 3306:3306 --name mysql --platform linux/x86_64 --env MYSQL_ROOT_PASSWORD=12345 mysql
请注意,在 arm64/v8 上使用 --platform linux/x86_64
时,您可能会失去 Linux Native AIO 支持。
查看 docker 容器日志:
[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 repo 允许构建 MySQL 5.7 aarch64 映像。
使用以下命令构建它(命名与官方 mysql:5.7 图像相同)默认情况下,所有 docker-compose 配置或指定 mysql:5.7.
docker build -t mysql:5.7 .
这意味着您不会再从官方 MySQL Dockerhub 存储库获得更新,但作为临时替代品,我发现它很有用。
Docker 在其官方文档中说:
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.
(来源here)
因此,要使您的项目正常运行,您应该做的是将 platform: linux/amd64
添加到您的 docker-compose.yml。
看起来像:
services:
mysql:
image: mysql:5.7
platform: linux/amd64
...
如您所想,性能可能会有所不同。
在模拟的 M1 机器上 运行 x86 容器的尝试可能会崩溃。即使容器在仿真下正确地执行 运行,它们也会比原生容器更慢并且使用更多的内存。从这里 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 上也遇到过这个问题,对我来说最稳定的解决方法是在 Docker 引擎设置中禁用 buildkit,这意味着设置为 false 而不是默认的 true。这里还有一个悬而未决的问题 https://github.com/docker/for-mac/issues/5873
看看他的githubpost
由于“Oracle 仅提供 pre-compile Arm64”二进制文件,因此您可以使用
图片 --> mysql:8.0-oracle
docker run -d --name mysql-8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<your_password> mysql:8.0-oracle
在 docker 命令中更改平台
参数:--平台linux/x86_64
这适用于因同一问题而来到这里但 ibmcom/db2
的任何人
您可以使用以下命令拉取 db2 镜像
docker pull --platform linux/x86_64 ibmcom/db2:latest
我正在 运行使用 Docker Apple Silicon Preview. 的最新版本 我创建了教程 container/images 并且运行良好。当我去创建自定义 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 在 ARM 上),但暂时,您可以将 platform
添加到您的服务中,例如:
services:
db:
platform: linux/x86_64
image: mysql:5.7
...
或者,考虑使用 MariaDB,它应该可以作为替代品,例如这个:
services:
db:
image: mariadb:10.5.8
...
这两种方式都适用于 Docker 预览
的 M1我有一个类似的问题,通过我的 dockerfile 中的这一行解决了:
之前
FROM ubuntu:18.04
之后
FROM --platform=linux/x86_64 ubuntu:18.04
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
Please refer to the following link 已知问题。在您 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"
对于努力让它与特定版本一起工作的任何人,以下内容对我不起作用:
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
来自 this answer,我将其添加到本地 docker-compose.override.yml
services:
mysql:
platform: linux/amd64
可以尝试 start/run 一个容器(对于 mac m1)
docker run -d -p 3306:3306 --name mysql --platform linux/x86_64 --env MYSQL_ROOT_PASSWORD=12345 mysql
请注意,在 arm64/v8 上使用 --platform linux/x86_64
时,您可能会失去 Linux Native AIO 支持。
查看 docker 容器日志:
[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 repo 允许构建 MySQL 5.7 aarch64 映像。
使用以下命令构建它(命名与官方 mysql:5.7 图像相同)默认情况下,所有 docker-compose 配置或指定 mysql:5.7.
docker build -t mysql:5.7 .
这意味着您不会再从官方 MySQL Dockerhub 存储库获得更新,但作为临时替代品,我发现它很有用。
Docker 在其官方文档中说:
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.
(来源here)
因此,要使您的项目正常运行,您应该做的是将 platform: linux/amd64
添加到您的 docker-compose.yml。
看起来像:
services:
mysql:
image: mysql:5.7
platform: linux/amd64
...
如您所想,性能可能会有所不同。
在模拟的 M1 机器上 运行 x86 容器的尝试可能会崩溃。即使容器在仿真下正确地执行 运行,它们也会比原生容器更慢并且使用更多的内存。从这里 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 上也遇到过这个问题,对我来说最稳定的解决方法是在 Docker 引擎设置中禁用 buildkit,这意味着设置为 false 而不是默认的 true。这里还有一个悬而未决的问题 https://github.com/docker/for-mac/issues/5873
看看他的githubpost
由于“Oracle 仅提供 pre-compile Arm64”二进制文件,因此您可以使用
图片 --> mysql:8.0-oracle
docker run -d --name mysql-8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<your_password> mysql:8.0-oracle
在 docker 命令中更改平台
参数:--平台linux/x86_64
这适用于因同一问题而来到这里但 ibmcom/db2
的任何人您可以使用以下命令拉取 db2 镜像
docker pull --platform linux/x86_64 ibmcom/db2:latest