Dockerfile 更新日志¶
在特性和向后兼容性方面,Dockerfile
并不严格遵循 Apache Airflow 的 语义化版本 方法。虽然 Airflow 代码严格遵循它,但 Dockerfile
实际上是为用户提供一种方便打包的 Airflow 的方式,它使用标准的容器方法,因此有时在构建过程或镜像的入口点中会有一些更改,需要稍微调整如何使用或构建它。
下面的更新日志描述了 Airflow 团队发布的每个 docker 镜像版本中引入的更改。
- 注意
下面的更新日志仅涉及在 Airflow DockerHub 上发布的便捷生产镜像。在那里发布的镜像通常是使用与 Airflow 一起发布的
Dockerfile
构建的。但是,您可以自由地从 Airflow 中获取最新发布的Dockerfile
,并使用它为Airflow 2
系列的任何 Airflow 版本构建镜像。不能保证它会工作,但如果它确实工作,那么您可以使用该镜像的最新功能为以前的 Airflow 版本构建镜像。
Airflow 2.10¶
该镜像不再支持 Debian-Bullseye(11)。该镜像基于 Debian-Bookworm (12)。
Airflow 2.9¶
“latest” 镜像(即当使用
apache/airflow
或apache/airflow:slim-latest
时的默认 Airflow 镜像)现在使用最新的受支持 Python 版本。之前它使用的是“默认” Python 版本,在 Airflow 2.8 中是 Python 3.8。对于 Airflow 2.9.0 发布的 Airflow 参考镜像,这些镜像将使用 Python 3.12,因为这是 Airflow 2.9 系列支持的最新版本。用户可以通过分别使用apache/airflow:2.9.0-python3.8
和apache/airflow:slim-2.9.0-python-3.8
镜像来使用 Python 3.8,因此虽然此更改可能会有破坏性,但切换到以前的行为非常容易。
PIP_USER
标志被删除,并替换为指向~/.local
的VIRTUAL_ENV
,Airflow 安装在那里。这产生了将 Airflow 安装视为常规虚拟环境的效果,但与常规虚拟环境不同,~/.local
目录被视为系统 级别
,当 worker 使用--system-site-packages
标志动态创建虚拟环境时,Airflow 安装和其中的所有包也会出现在新的虚拟环境中。当您不使用该标志时,它们不会被复制到那里,这与设置了PIP_USER
的向后兼容行为一致。镜像包含最新的
uv
二进制文件(发布时为最新版本),它是pip
的一个新的更快替代品。虽然镜像仍然默认使用pip
,但您可以使用uv
安装软件包,并且 - 实验性地 - 您还可以使用--arg AIRFLOW_USE_UV=true
构建自定义镜像,这将使用uv
执行安装。这是一种实验性支持,因为uv
非常快,但也是 Python 生态系统中的一个非常新的功能。用于安装镜像的约束现在可以在“${HOME}/constraints.txt”中找到 - 您可以使用它们在镜像中安装其他软件包,而无需找出应该使用哪些约束。
该镜像将
libev
库添加到镜像中,因为 Python 3.12 的 cassandra 驱动程序需要它,此外,libev
还将在其他 Python 版本中用作 cassandra 驱动程序处理事件的更健壮、更快的方式。
Airflow 2.8¶
2.8.3
gosu
二进制文件已从镜像中删除。对于依赖gosu
在容器中更改用户的用户来说,这是一个潜在的重大更改。gosu
二进制文件被删除,因为它与较旧的 Go 标准库链接,是安全漏洞的来源。smtp
提供程序现在包含在镜像中默认安装的提供程序列表中。
2.8.1
修复了 MySQL 客户端库中的差异。在 2.8.0 中,如果在构建自定义 X86 镜像期间不指定
INSTALL_MYSQL_CLIENT_TYPE
构建参数,默认情况下会使用 MariaDB 库编译包,但 MySQL 库会安装在最终镜像中。
2.8.0
将
libxmlsec1
和libxmlsec1-dev
库添加到开发 PROD 镜像,并将libxmlsec1
库添加到运行时 PROD 镜像,因为python3-saml
库需要它们。该镜像在 2.8.0 中基于
Debian Bookworm
,而不是Debian Bullseye
。这在构建自定义镜像时可能会导致一些问题。建议您确保系统级依赖项与Debian Bookworm
兼容。虽然 Airflow 2.8.0 的所有参考镜像都是在Debian Bookworm
上构建的,但仍然可以在 2.8.0 中构建已弃用的基于Debian Bullseye
的自定义镜像,方法如下默认情况下,镜像现在安装了“MariaDB”客户端。以前的镜像安装了“MySQL”客户端。MariaDB 客户端是“MySQL”客户端的替代品,并且与 MySQL 兼容。这对于在其镜像中使用 MySQL 客户端的用户来说可能是一个重大更改,但这些应该是非常特殊的情况,绝大多数用户不应该看到任何差异。用户仍然可以通过设置
INSTALL_MYSQL_CLIENT_TYPE=mysql
构建参数并构建自定义 X86 镜像来使用 MySQL 客户端。ARM 镜像始终使用 MariaDB 客户端,此参数将被忽略。 “mysql” apt 存储库已从 /etc/apt/sources.list.d/ 中删除,如果您想在扩展镜像时从此存储库安装任何内容,则需要在 Dockerfile 中手动添加正确的密钥和存储库,按照 使用 MySQL APT 存储库的快速指南 中的说明进行操作。
Airflow 2.7¶
2.7.3
为在构建自定义镜像期间通过
INSTALL_MYSQL_CLIENT_TYPE
构建参数选择 MySQL 客户端库类型添加实验性功能。mysql
用于从 Oracle APT 存储库安装 MySQL 客户端库,mariadb
用于从 MariaDB 存储库安装 MariaDB 客户端库。MySQL 客户端库的选择仅在 AMD64 (x86_64) 上可用,对于 ARM docker 镜像,它将始终安装 MariaDB 客户端。镜像中的 Docker CLI 版本已提升到 24.0.6 版本。
为本地构建启用了 PIP 缓存,以加快本地自定义镜像的构建速度
2.7.0
到目前为止,Python 3.7 不再受 Python 社区支持。因此,要使用 Airflow 2.7.0,您必须确保您的 Python 版本是 3.8、3.9、3.10 或 3.11。
Airflow 2.6¶
2.6.3
将
libgeos-dev
库添加到运行时 PROD 镜像,因为 ARM 镜像上的 BigQuery 库需要它
2.6.0
默认安装 Snowflake 提供程序
ARM 实验性镜像通过 MariaDB 客户端库添加了对 MySQL 的支持。
Airflow 2.5¶
2.5.1
ARM 实验性镜像添加了对 MSSQL 的支持
2.5.0
docker CLI 二进制文件现在默认添加到镜像中(可在 PATH 上使用)。使用版本 20.10.9。
Airflow 2.4¶
2.4.0
您可以在通过
ADDITIONAL_PIP_INSTALL_FLAGS
构建参数构建镜像时指定其他pip install
标志。对
Debian Buster
的支持已删除,包括构建自定义镜像的可能性,因为Debian Buster
已达到生命周期结束。
Airflow 2.3¶
2.3.0
Airflow 2.3
Dockerfile
现在更好地针对缓存进行了优化,并且是“独立的”,这意味着您可以将Dockerfile
仅复制到任何文件夹并开始构建自定义镜像。然而,这需要 Buildkit 来构建镜像,因为我们开始使用仅在Buildkit
中可用的功能。可以通过设置DOCKER_BUILDKIT=1
作为环境变量或安装 buildx 插件并运行docker buildx build
命令来完成此操作。通过 MariaDB 客户端库在 ARM 上实验性地支持 MySQL
添加 Python 3.10 支持
切换到基于
Debian Bullseye
的镜像。Debian Buster
已弃用,仅可用于自定义镜像构建。添加多平台支持 (AMD64/ARM64) 以适应 MacOS M1 用户
统一了用于控制是否从上下文文件安装软件包和 Airflow 的构建参数
删除了
INSTALL_FROM_PYPI
参数 - 现在会自动检测。INSTALL_FROM_DOCKER_CONTEXT_FILES
参数已更改为INSTALL_PACKAGES_FROM_CONTEXT
Airflow 2.2¶
2.2.4 * 添加对
.piprc
和pip.conf
自定义的支持 * 添加 ArtifactHub 标签,以便更好地发现镜像 * 更新默认 Python 镜像为 3.7 * 使用Buildkit
构建镜像 (可选) * 修复在 Azure 上构建镜像时出现text file busy
错误的问题2.2.3 * 无更改
2.2.2 * 无更改
2.2.1 * 解决
libstdcpp
TLS 错误的问题2.2.0 * 从 Airflow 镜像中删除 AIRFLOW_GID (5000)(可能对使用它的用户造成破坏性更改) * 为快速入门 docker compose 添加警告 * 修复 Celery 工作节点的暖关闭(信号传播) * 将 Oauth 库添加到 PROD 镜像 * 添加 Python 3.9 支持
Airflow 2.1¶
MySQL 在 2022 年 2 月 17 日更改了其软件包的签名密钥。这导致所有发布的镜像在扩展时失败。因此,在 2021 年 2 月 18 日,我们重新发布了所有
2.2
和2.1
镜像,其中包含最新版本的Dockerfile
,其中包含新的签名密钥。由于此原因,某些 2.1 镜像的行为发生了一些细微变化(更多详细信息如下)详细的 问题链接
- 注意
下面的更改在 2022 年 2 月 18 日镜像刷新之前有效。由于所有镜像都在 2 月 18 日使用与 2.1.4 相同的
Dockerfile
进行了刷新,因此 2.1.1 -> 2.1.3 的更改实际上应用于 2.1.* 系列中的所有镜像。刷新的镜像也添加了这些修复。
所有在 2022 年 2 月 18 日刷新的 2.1.* 镜像版本都应用了这些修复:* 修复在 Azure 上构建镜像时出现
text file busy
错误的问题 * 解决libstdcpp
TLS 错误的问题 * 从 Airflow 镜像中删除 AIRFLOW_GID (5000)(可能对使用它的用户造成破坏性更改)* 为快速入门 docker compose 添加警告 * 将 Oauth 库添加到 PROD 镜像
原始镜像变更日志(在 2022 年 2 月 18 日刷新之前)
- 2.1.4
解决
libstdcpp
TLS 错误的问题修复了连接 URL 中端口号的检测
改进了快速入门 docker compose 的警告
修复 Celery 工作节点的暖关闭(信号传播)
- 2.1.3
修复了自动创建用户以使用非弃用的
create user
而不是user_create
从
worker
和flower
命令中删除等待 Celery 后端的逻辑,而不是只针对scheduler
和celery
如果请求升级,则从 Airflow 1.10 中删除已弃用的
airflow upgradedb
命令添加 Python 3.9 支持
- 2.1.2
无更改
- 2.1.1
修复了缺少默认命令的失败问题(当没有传递任何命令时失败)
添加了
_PIP_ADDITIONAL_REQUIREMENTS
开发功能
- 2.1.0
取消设置默认的
PIP_USER
变量 - 这会导致 PythonVirtualEnv 失败
Airflow 2.0¶
MySQL 在 2022 年 2 月 17 日更改了其软件包的签名密钥。这导致所有发布的镜像在扩展时失败。因此,在 2021 年 2 月 18 日,我们重新发布了所有
2.2
和2.1
镜像,其中包含最新版本的Dockerfile
,其中包含新的签名密钥。由于此原因,2.0.2 镜像的行为没有变化。详细的 问题链接 。仅重新生成了 2.0.2 镜像,因为 2.0.1 和 2.0.0 版本很少使用,并且不太可能有人会扩展这些镜像。扩展 2.0.1 和 2.0.0 镜像会导致“缺少密钥”的失败。
- 2.0.2
为
root
用户设置正确的 PYTHONPATH。允许以 root 身份运行镜像如果运行镜像时,airflow 用户使用了已弃用的 5000 组 ID,则发出警告(为了与 OpenShift 兼容,应为 0)。如果组 5000 与任何其他用户一起使用,则会失败(无论如何都无法工作,但会出现神秘的错误)
默认情况下将 umask 设置为 002,以便您可以实际更改用于运行镜像的用户 ID(与 OpenShift 兼容所必需)
如果 CONNECTION_CHECK_MAX_COUNT 等于 0,则跳过检查数据库和 Celery 后端
- 2.0.1
检查数据库可用性时避免反向 IP 查找。这有助于解决配置错误的 docker 引擎上的长时间延迟
添加 Redis 和 AMQP 代理端口的自动检测
修复了 URL 中所有用户/密码组合的检测 - 有助于自动检测端口和测试连接
添加在进入镜像时自动创建管理员用户的可能性
当使用除
airflow
之外的用户时,自动创建系统用户。与 OpenShift 兼容所必需如果指定为参数,则允许执行
bash
或python
如果将
airflow
命令指定为run
命令的第一个参数,则删除该命令
- 2.0.0
基于 Debian Buster 的镜像的初始版本
发布镜像后的更改¶
有时,我们的镜像需要使用较新的 Dockerfiles
或约束条件重新生成。当发现问题或依赖项发布了破坏性更改,导致已发布的镜像失效时,就会发生这种情况,而重新生成镜像使其再次可用。虽然我们不能保证发生这种情况时 100% 的向后兼容性,但我们至少在此处记录下来,以便受影响的用户可以找到更改的原因。
日期 |
受影响的镜像 |
可能导致破坏性更改 |
原因 |
拉取请求/问题链接 |
---|---|---|---|---|
2024 年 8 月 2 日 |
2.9.3 |
|
FAB 提供程序注销对于 2.9.3 不起作用 |
|
2024 年 3 月 12 日 |
2.8.3 |
|
两个依赖项都导致了破坏性更改 |
https://github.com/apache/airflow/pull/37748 https://github.com/apache/airflow/pull/37701 |
2023 年 12 月 16 日 |
所有 2..* |
|
在密钥过期事件之后,MySQL 存储库被删除 |
|
2022 年 6 月 17 日 |
2.2.5 2.3.0-2.3.2 |
|
Flask App Builder 与 Authlib >= 1.0.0 不兼容 |
|
2022 年 1 月 18 日 |
所有 2.2.*, 2.1.* |
|
MySQL 在 2022 年 1 月 17 日更改了其软件包的签名密钥 |