我正在写一个Dockerfile。有办法在这个文件中做注释吗?

Docker是否有一个注释选项来接受一行的剩余部分并忽略它?


当前回答

正如其他人提到的,注释是用#引用的,并记录在这里。但是,与某些语言不同的是,#必须在行首。如果它们出现在整行中,则将它们解释为参数,并可能导致意外的行为。

# 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:\

第一行虽然看起来是注释,但实际上是一个解析器指令,用于将转义字符更改为反撇号,以便COPY和RUN命令可以在路径中使用反斜杠。BuildKit还使用解析器指令,用语法行更改前端解析器。有关如何在实践中使用它的更多细节,请参阅实验语法。

使用多行命令,被注释的行将被忽略,但是你需要单独注释掉每一行:

$ 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

其他回答

格式

Dockerfile的格式如下:

我们可以使用#来进行注释,例如#COMMENT

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

当我们构建docker时,从上面的文件中,它会跳过第一行并进入下一行,因为我们使用#注释了它

正如其他人提到的,注释是用#引用的,并记录在这里。但是,与某些语言不同的是,#必须在行首。如果它们出现在整行中,则将它们解释为参数,并可能导致意外的行为。

# 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:\

第一行虽然看起来是注释,但实际上是一个解析器指令,用于将转义字符更改为反撇号,以便COPY和RUN命令可以在路径中使用反斜杠。BuildKit还使用解析器指令,用语法行更改前端解析器。有关如何在实践中使用它的更多细节,请参阅实验语法。

使用多行命令,被注释的行将被忽略,但是你需要单独注释掉每一行:

$ 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

注释使用#语法

来自:https://docs.docker.com/engine/reference/builder/格式

# My comment here
RUN echo 'we are running some cool things'
# this is comment
this isn't comment

就是这样做的。你可以把它放在行中的任何地方,后面的任何内容都将被忽略

Dockerfile注释以#开头,就像Python一样。 Kstaken有很好的例子:

# 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"]