Docker RUN指令HereDoc示例运行失败,请求技术排查与解决
Dockerfile HereDoc语法报错问题解决
问题背景
我尝试实现Docker官方文档提供的HereDoc示例,Dockerfile内容如下:
# syntax=docker/dockerfile:1.3-labs FROM ubuntu:20.04 RUN <<EOF echo "Hello" >> /hello echo "World!" >> /hello EOF
使用的Docker版本:
~/test$ docker --version Docker version 20.10.22, build 3a2c30b
构建时抛出错误:
~/test$ docker build . Sending build context to Docker daemon 2.048kB Error response from daemon: dockerfile parse error line 6: unknown instruction: ECHO
我还尝试了指定Dockerfile版本1、1.3、1.4、2、2.0,均未解决问题。请问是操作有误还是该功能暂不可用?
问题原因及解决方法
核心原因:你的Docker版本(20.10.22)不支持Dockerfile 1.3-labs的HereDoc语法。HereDoc是Docker BuildKit的实验性功能,需要同时满足两个条件:
- Docker版本至少为23.0.0(这是支持该实验性语法的最低版本要求)
- 必须启用BuildKit构建模式
具体解决步骤:
- 升级Docker版本:将Docker升级到23.0.0或更高版本,低版本无法识别该语法
- 启用BuildKit:
- 临时启用:执行构建命令时添加环境变量,命令为
DOCKER_BUILDKIT=1 docker build . - 永久启用:编辑
/etc/docker/daemon.json文件,添加配置{"features":{"buildkit": true}},保存后重启Docker服务
- 临时启用:执行构建命令时添加环境变量,命令为
错误说明:低版本Docker会将EOF包裹的
echo命令误识别为Dockerfile指令,而非Shell命令,因此抛出"unknown instruction: ECHO"错误,即便指定更高的Dockerfile版本标签也无法解决,因为底层Docker引擎不支持该特性。
内容的提问来源于stack exchange,提问作者Eric M.
相关产品推荐
相关产品推荐

