Dockerfile 里怎么写注释?
Dockerfile 用 # 开头写注释,独占一行,不支持行尾注释;指令参数里的 # 不算注释。另可用 parser directive 指定语法版本。本文说明规则与常见坑。
写法:以 # 开头、独占一行,构建时 Docker 完全忽略该行。Dockerfile 不支持行尾注释——指令后面跟 # 会被当成参数的一部分,这是最常见的坑。
正确写法
# 安装运行依赖
RUN apt-get update && apt-get install -y \
curl \
ca-certificates
# 应用启动命令
CMD ["python", "app.py"]
注释用途:说明镜像用途、解释某条指令的原因、记录维护者与构建要求。
错误写法(行尾注释)
RUN apt-get install -y curl # 装 curl
# 装 curl 不会被当注释——它会成为 RUN 命令的一部分传给 shell(这个例子里 shell 恰好把 # 当注释,但 COPY 等指令就会把 # 当文件名处理,直接构建失败)。注释永远独占一行。
续行中的注释
反斜杠续行的指令,注释不能插在续行中间:
# 正确:注释在指令上方
RUN apt-get update \
&& apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/*
特殊的 # 行:parser directive
文件最顶部以 # 关键字= 形式出现的行是解析指令,不是普通注释:
# syntax=docker/dockerfile:1
# escape=`
syntax 指定 Dockerfile 语法前端版本(用新特性时需要),escape 改转义符(Windows 镜像常用)。它们必须出现在所有注释和指令之前。
常见问题(FAQ)
Q:注释会影响构建缓存吗?
A:不会。注释行被解析器丢弃,不参与缓存键计算,改注释不触发重建。
Q:多行注释有吗?
A:没有。每行都得加 #。
Q:.dockerignore 文件里怎么注释?
A:同样用 # 开头独占一行。