SSc*_*tti 3 mysql wkhtmltopdf docker docker-compose
我有一个 docker-compose.yml,它构建了大约 8 个容器,主要由 mysql、postgres、php-nginx 和其他一些自定义构建的包组成。生产版本在 UBUNTU 主机上运行,我的开发包在带有 Intel 芯片的 Mac OS Catalina 上运行。整个事情也保存在 Github 上的一个私人仓库中。
一位合作者拥有一台 M1 Mac,我可能很快就会升级到 M1 Mac,要么是 MacBook Pro,要么是 27 英寸 iMac(可能在今年晚些时候发布)。
我们尝试在他的 M1 Mac 上安装该软件包,但遇到了一些问题,甚至可能更多。
一个问题似乎与 compose 文件中的 MySQL 构建有关(删除了一些项目)
mysql_db:
image: mysql:8.0.26
container_name: mysql_db
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
--max-allowed-packet=67108864
#--general-log=TRUE
#--general-log-file=/var/lib/mysql/mysql-log.log
restart: unless-stopped
ports:
- "3333:3306"
healthcheck:
test: mysqladmin ping -h 127.0.0.1 -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
security_opt:
- seccomp:unconfined
tty: true
environment:
TZ: ""
MYSQL_ROOT_PASSWORD: ''
MYSQL_USER: ''
MYSQL_PASSWORD: ''
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./MySQL_DB:/var/lib/mysql/
- ./mysql_init:/docker-entrypoint-initdb.d
Run Code Online (Sandbox Code Playgroud)
看起来有几种方法可以解决这个问题,如下所示:
Docker(Apple Silicon/M1 预览版)MySQL“清单列表条目中没有 linux/arm64/v8 的匹配清单”
和这里:
https://dev.to/lakhansamani/create-docker-image-on-apple-silicon-m1-mac-2f75
通过在 CLI 上指定 --platform linux/amd64 或在 compose 文件中指定 platform: linux/amd64 。
在我的 DockerFiles 之一中,我还有:
COPY wkhtmltox_0.12.6-1.buster_amd64.deb /
RUN dpkg -i wkhtmltox_0.12.6-1.buster_amd64.deb
Run Code Online (Sandbox Code Playgroud)
这是wkhtmltopdf 的 debian 软件包(我认为有 QT 支持)
这里有预构建包的下载:
https://wkhtmltopdf.org/downloads.html
那里有该软件包的 ARM64 版本。
只是想弄清楚如何配置构建(docker-compose.yml、DockerFiles 等),以便它基本上可以构建在任何架构上。
如果有一种方法可以检测 docker-compose.yml 和 DockerFiles 中的架构,那么这可能是最好的,这样它就可以构建正确的 mysql 包并为 whtmltopdf 使用正确的 debian 包。我怀疑我可能会遇到 php、postgres 和 nginx 构建的其他问题,但我们还没有走到这一步。
合作者也有一台 Windows 机器,我认为这会起作用,但我自己很快就会转向 M1 Mac。
只是寻找最好的方法来处理这个问题,这样我们就不必为不同的架构保留单独的构建。
这是更详细一点的:
https://www.docker.com/blog/faster-multi-platform-builds-dockerfile-cross-compilation-guide/
就我而言,.deb 包变体可能是唯一需要修复的其他项目,也许我可以使用 apt-get 来代替,但我可能会失去 QT 支持。
对于 M1 处理器,您必须指定平台
services:
mysql_db:
platform: linux/x86_64
image: mysql:8.0.26
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用 MariaDB 进行开发。
DockerHub 上现在有 MySQL 8 的 arm64 映像:
https://hub.docker.com/r/arm64v8/mysql/
以前的答案是没有官方的arm64 MySQL 8镜像,解决方法是指定platform: linux/x86_64
然而,它通过仿真在arm64 M1上运行x86代码,
所以如果你仍然使用这种方式,你的性能就会受到影响。
归档时间: |
|
查看次数: |
9771 次 |
最近记录: |