Ubuntu构建Airflow Docker镜像报unknown instruction: FUNCTION如何解决
问题诱因
报错的核心原因是Docker构建引擎的语法兼容问题:
- Airflow 2.3.2版本的官方Dockerfile依赖Docker BuildKit构建引擎的专属语法特性,包括内嵌shell函数定义、Here-Doc多行命令写法,这些特性不被Docker传统经典构建器支持。
- 不同系统的Docker默认配置存在差异:Mac OS上运行的Docker Desktop默认开启BuildKit能力,因此可以正常解析该Dockerfile;Ubuntu系统下安装的20.10.7版本Docker默认关闭BuildKit,使用经典构建器解析文件时,会把shell脚本块中独立成行的
function关键字误识别为Docker原生构建指令,最终抛出unknown instruction: FUNCTION的解析错误。
修复方案
根据实际场景选择以下任意一种方案即可:
- 临时启用BuildKit构建:执行构建命令前注入环境变量开启BuildKit,命令示例:
DOCKER_BUILDKIT=1 docker build -t your-custom-airflow-image .
- 永久开启BuildKit:编辑Docker配置文件
/etc/docker/daemon.json,添加如下配置:
{ "features": { "buildkit": true } }
保存配置后依次执行systemctl daemon-reload、systemctl restart docker命令重启Docker服务,后续直接执行docker build命令即可正常完成构建。
- 无BuildKit兼容改造:如果环境暂时无法开启BuildKit,可以手动修改官方Dockerfile,将所有内嵌shell函数、Here-Doc格式的多行命令改写为传统RUN指令下的链式shell命令,移除独立成行的
function关键字定义,把函数逻辑合并为连续的shell执行语句。该方案改动成本较高,优先推荐前两种开启BuildKit的方案。
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

