Dockerfile中能否在同一条RUN指令中同时使用挂载与Here文档?
问题原因与解决方法
你的报错是因为Docker无法识别RUN指令后的here-document语法,把后续的apt-get当成了独立的Docker指令,导致解析失败。要结合--mount=cache和here-document,需要明确让RUN调用shell来执行这段脚本内容,调整Dockerfile语法即可。
正确写法示例
方法1:指定shell执行here-document
FROM ubuntu:22.04 RUN --mount=type=cache,target=/var/apt/cache /bin/bash -c <<EOT apt-get update -qq apt-get install -y apt-utils EOT
方法2:简化为链式命令(无需here-document)
如果不需要多行脚本的格式,也可以用&&串联命令,这是Dockerfile中更常见的写法:
FROM ubuntu:22.04 RUN --mount=type=cache,target=/var/apt/cache \ apt-get update -qq && \ apt-get install -y apt-utils
原理说明
Docker的RUN指令在处理带--mount参数的命令时,需要明确命令的执行上下文。直接使用here-document时,Docker会误将换行后的内容解析为新指令;通过/bin/bash -c包裹后,here-document会被当作shell脚本的一部分传递给bash执行,就能避免解析错误。
内容的提问来源于stack exchange,提问作者shavera
相关产品推荐
相关产品推荐

