You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 19:37:08