【问题标题】:Adjustment to docker-compose.yml for M1 chip?为 M1 芯片调整 docker-compose.yml?
【发布时间】: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

看起来有几种方法可以解决这里建议的问题:

Docker (Apple Silicon/M1 Preview) MySQL "no matching manifest for linux/arm64/v8 in the manifest list entries

这里:

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


    【解决方案1】:

    对于 M1 处理器,您必须指定平台

    services:
      mysql_db:
        platform: linux/x86_64
        image: mysql:8.0.26
    

    您也可以使用 MariaDB 进行开发。

    【讨论】:

    • 另一个问题似乎与使用 Windows Docker 桌面有关。我在 entrypoint.sh 文件中遇到了一些错误,例如 /usr/bin/env: 'bash\r': 。 . .这只是文件的 CR/LF 格式问题。他有 Windows 和 M1 Mac。我有 LINUX 和 Intel Mac。
    • 在我的一些容器中,我映射到主机,例如:volumes: - ./Storage:/var/lib/orthanc/Storage 这适用于 MacOS 和 LINUX,但不确定它是否适用窗户。
    • 不要使用 MariaDB 作为 MySQL 5.7+ 的替代品。从 MySQL 5.7 以及以后的版本开始,这两个数据库已经分开太多了,这会让你头疼。在生产和开发中坚持一个或另一个,否则在部署到生产时会遇到意想不到的问题。