在树莓派上运行puckel/docker-airflow镜像

3
  1. 为什么一些Docker镜像不兼容树莓派(linux/arm/v7)等平台?
  2. 此外,您能否修改Dockerfile或其他配置文件以使其兼容?

感谢任何建议!


到目前为止,我已经安装了docker和docker-compose,然后按照puckel/docker-airflow自述文件的说明进行操作,跳过可选构建,然后尝试通过以下方式运行容器:

docker run -d -p 8080:8080 puckel/docker-airflow webserver

我收到了以下警告:

警告: 所请求的镜像平台 (linux/amd64) 与检测到的主机平台 (linux/arm/v7) 不匹配,并且没有请求特定平台

这个问题 中找到并运行了以下命令:

docker run -d -p 8080:8080 --platform linux/arm/v7 puckel/docker-airflow:latest webserver

接下来,出现了这个错误:

docker:守护程序的错误响应:找到了引用为puckel/docker-airflow:latest的镜像,但与指定平台不匹配:期望linux/arm/v7,实际为linux/amd64。
请参阅'docker run --help'。


1
你正在使用哪个版本的Docker?docker --version。看起来20版本有一些问题,我尝试降级回到19版本时运气不错。 - Branden Barber
谢谢你的建议,我会检查一下看看是否有效。 - willwrighteng
1
经过进一步调查,发现问题是由于缺乏QEMU支持所致。Docker Desktop默认包含这些支持,但我的Ubuntu/AWS机器上没有。我安装了这些软件包,问题得以解决。以下是我遵循的教程链接:https://www.stereolabs.com/docs/docker/building-arm-container-on-x86/ - Branden Barber
我还有一点困难,但似乎使用QEMUbuildx命令来模拟架构是解决我的问题的一般方法。我还在努力弄清楚如何将所有这些组合在一起。谢谢!(Docker博客文章 - willwrighteng
1个回答

4

可执行文件,即二进制文件,依赖于计算机的架构(amd64、arm...)。Docker的镜像包含二进制文件。也就是说,Docker镜像是计算机架构相关的。

因此,如果您查看Docker的注册表,图像的操作系统和架构是指定的。参考您使用的dockerhub/puckel/docker-airflow,您可以看到它只支持linux/amd64。换句话说,在arm架构中无法运行。如果您想要在这个arm架构上运行,则有几种方法,但关键点只有一个:即使用arm而不是amd64构建原始代码的结果作为Docker镜像。


github.com/puckel/docker-airflow上,构建指南已经详细说明。

首先,如果您查看github提供的Dockerfile,它从镜像FROM python:3.7-slim-buster开始。对应的python:3.7-slim-buster支持linux/arm/v5linux/arm/v7linux/arm/v5linux/arm64/v8dockerhub/python/3.7-slim-buster

换句话说,您可以构建到Arm架构。

我有通过docker buildx命令创建多种架构镜像的经验。当然,还有其他方法,但我只会简要介绍以下命令。


dockerhub/buildx

  • docker buildx是一个实验性功能,仍然建议不在生产环境中使用Experimental features must not be used in production environments
docker buildx build --platform linux/arm/v5,linux/arm/v7 .

感谢您的回复。所以二进制文件可以通过Docker命令行工具进行修改,但在文件系统中无法找到作为目录,是这样吗? - willwrighteng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接