如何在Dockerfile中发表评论?


405

我正在写一个Dockerfile。有没有办法在此文件中发表评论?

Docker是否具有注释选项,该选项会占用一行的其余部分并忽略它?

Answers:


514

您可以使用#作为该行的开头来注释该行

# Everything on this line is a comment

注意:作为注释只能在行的开头使用。


8
因此,第二个问题的答案是:“ Docker是否有一个注释选项,将其余的行都忽略了?” , 没有?Docker将以#开头的行视为注释
彼得·莫滕森

1
您可以更新您的答案并使它更全面/完整吗?例如,回答第二个问题。
彼得·莫滕森

7
BMitch的答案填写了该答案中缺少的重要信息。
乔纳森

99

正如其他人提到的那样,注释用引用,#并在此处记录。但是,与某些语言不同,#必须在行的开头。如果它们出现在行的途中,它们将被解释为参数,并可能导致意外行为。

# This is a comment

COPY test_dir target_dir # This is not a comment, it is an argument to COPY

RUN echo hello world # This is an argument to RUN but the shell may ignore it

还应注意,解析器指令最近已添加到Dockerfile中,其语法与注释相同。它们需要出现在文件顶部,之前没有其他注释或命令。最初,添加此指令是为了更改转义符以支持Windows:

# escape=`

FROM microsoft/nanoserver
COPY testfile.txt c:\
RUN dir c:\

第一行似乎是一条注释,它是一个解析器指令,用于将转义符更改为反引号,以便COPYand RUN命令可以在路径中使用反斜杠。BuildKit还可以使用解析器指令来用一行更改前端解析器syntax。有关如何在实践中使用它的更多详细信息,请参见实验语法

使用多行命令时,注释行将被忽略,但是您需要分别注释掉每行:

$ cat Dockerfile
FROM busybox:latest
RUN echo first command \
# && echo second command disabled \
 && echo third command

$ docker build .
Sending build context to Docker daemon  23.04kB
Step 1/2 : FROM busybox:latest
 ---> 59788edf1f3e
Step 2/2 : RUN echo first command  && echo third command
 ---> Running in b1177e7b563d
first command
third command
Removing intermediate container b1177e7b563d
 ---> 5442cfe321ac
Successfully built 5442cfe321ac

3
+1表示“必须在行首”。行继续呢?如果注释行以\结尾,下一行也将成为注释吗?换句话说,如果要注释掉多行命令,是否所有行都需要以#第一行开头还是仅以第一行开头?实验表明是前者。该答案也可以进行更新以涵盖该问题(使其更加出色)。
彼得·莫滕森

1
@PeterMortensen每行都需要注释,docker完全忽略了换行之前的所有内容。对我来说有趣的是,多行命令可以跨越注释。
BMitch

19

使用#语法进行注释

来自:https : //docs.docker.com/engine/reference/builder/#format

# My comment here
RUN echo 'we are running some cool things'

2
但是我们可以在RUN,COPY,MAINTAINER等行中评论吗?
亚历山大·米尔斯

@AlexanderMills是的,根据我链接到内嵌评论的文档来看,这是有效的 ADD . $foo # ADD . /bar
edhurtig

2
@AlexanderMills注意,但是,在行尾更改注释会导致docker在docker build上重新运行该行,因为“行已更改”。这可能是有用的和/或令人讨厌的
Phylliida

很好,也许码头工人应该忽略评论大声笑
亚历山大·米尔斯

那既是一个功能又是一个错误,我想Docker会认为它是一个功能,而且我认为这实际上是有道理的
Alexander Mills

4

就像Python一样,Dockerfile注释以'#'开头。这是一个很好的示例(kstaken / dockerfile-examples):

# Install a more-up-to date version of MongoDB than what is included in the default Ubuntu repositories.

FROM ubuntu
MAINTAINER Kimbro Staken

RUN apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
RUN echo "deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen" | tee -a /etc/apt/sources.list.d/10gen.list
RUN apt-get update
RUN apt-get -y install apt-utils
RUN apt-get -y install mongodb-10gen

#RUN echo "" >> /etc/mongodb.conf

CMD ["/usr/bin/mongod", "--config", "/etc/mongodb.conf"] 

是的,但是与Python不同的是,在行的开头没有命令吗?您可能需要更新答案。
彼得·莫滕森

只是一个注释:MAINTAINER 已弃用,现在建议使用标签:LABEL maintainer="foo@abc.com"
Alexei Martianov

2

格式

这是格式 Dockerfile:

我们可以使用#为目的的注释#Comment,例如

#FROM microsoft/aspnetcore
FROM microsoft/dotnet
COPY /publish /app
WORKDIR /app
ENTRYPOINT ["dotnet", "WebApp.dll"]

在构建docker时,从上面的文件中,它跳过了第一行,转到了下一行,因为我们已经使用注释了它 #


2

Docker会将以#开头的行视为注释,除非该行是有效的解析器指令。一行中其他任何地方的#标记均被视为参数。

例:

# this line is a comment

RUN echo 'we are running some # of cool things'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.