【发布时间】:2022-01-10 20:45:42
【问题描述】:
我有一个 docker-compose.yml,它构建了大约 8 个容器,主要由 mysql、postgres、php-nginx 和一些其他自定义构建的包组成。生产版本在 UBUNTU 主机上运行,我的开发包在带有 Intel 芯片的 Mac OS Catalina 上运行。整个事情也在 Github 上的一个私人仓库中维护。
合作者有一台 M1 Mac,我可能很快会升级到 M1 Mac,MacBook Pro 或 27 英寸 iMac 可能会在今年晚些时候发布。
我们尝试在他的 M1 Mac 上安装该软件包,但遇到了一些问题,而且可能更多。
一个问题似乎与撰写文件中的 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
看起来有几种方法可以解决这里建议的问题:
这里:
https://dev.to/lakhansamani/create-docker-image-on-apple-silicon-m1-mac-2f75
通过在 CLI 上指定 --platform linux/amd64 或在撰写文件中指定平台:linux/amd64。
在我的一个 DockerFiles 中,我也有:
COPY wkhtmltox_0.12.6-1.buster_amd64.deb /
RUN dpkg -i wkhtmltox_0.12.6-1.buster_amd64.deb
这是一个 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 支持.
【问题讨论】:
标签: mysql docker docker-compose wkhtmltopdf