¿Cómo hago un comentario en un Dockerfile?

408

Estoy escribiendo un Dockerfile. ¿Hay alguna manera de hacer comentarios en este archivo?

¿Docker tiene una opción de comentario que toma el resto de una línea y la ignora?

kpie
fuente

Respuestas:

518

Puede usar # al comienzo de la línea para comentar la línea .

# Everything on this line is a comment

Nota: # como comentario solo se puede usar al comienzo de la línea.

Ranjeet
fuente
99
Entonces, la respuesta a la segunda pregunta, "¿Docker tiene una opción de comentario que toma el resto de una línea y la ignora?" , ¿no es? " Docker trata las líneas que comienzan con # como un comentario " .
Peter Mortensen
1
¿Puedes actualizar tu respuesta y hacerla más completa / completa? Por ejemplo, respondiendo la segunda pregunta.
Peter Mortensen
8
La respuesta de BMitch completa la información crítica que falta en esta respuesta.
Jonathan
99

Como otros han mencionado, los comentarios están referenciados con a #y están documentados aquí . Sin embargo, a diferencia de algunos idiomas, #debe estar al principio de la línea. Si ocurren a mitad de la línea, se interpretan como un argumento y pueden dar lugar a un comportamiento inesperado.

# 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

También debe tenerse en cuenta que recientemente se han agregado directivas de analizador al Dockerfile que tienen la misma sintaxis que un comentario. Deben aparecer en la parte superior del archivo, antes de cualquier otro comentario o comando. Originalmente, esta directiva se agregó para cambiar el carácter de escape para admitir Windows:

# escape=`

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

La primera línea, si bien parece ser un comentario, es una directiva del analizador para cambiar el carácter de escape a una tecla de retroceso para que los comandos COPYy RUNpuedan usar la barra diagonal inversa en la ruta. Una directiva de analizador también se usa con BuildKit para cambiar el analizador de interfaz con una syntaxlínea. Consulte la sintaxis experimental para obtener más detalles sobre cómo se usa esto en la práctica.

Con un comando de varias líneas, las líneas comentadas se ignoran, pero debe comentar cada línea individualmente:

$ 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
BMitch
fuente
3
+1 por mencionar "debe estar al principio de la línea" . ¿Qué pasa con la continuación de línea? Si una línea de comentario termina con \, ¿la siguiente línea también será un comentario? En otras palabras, si un comando de varias líneas fuera comentado, ¿todas las líneas tendrían que comenzar con #o solo la primera línea? Un experimento sugiere que es el primero. Esta respuesta podría actualizarse para cubrir eso también (haciéndolo aún más increíble).
Peter Mortensen el
1
@PeterMortensen El comentario es necesario en cada línea, la ventana acoplable ignora por completo todo hasta el salto de línea. Lo que es interesante para mí es que el comando de varias líneas puede abarcar los comentarios.
BMitch
19

Use la #sintaxis para comentarios

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

# My comment here
RUN echo 'we are running some cool things'
edhurtig
fuente
2
pero ¿podemos comentar sobre la misma línea que RUN, COPY, MAINTAINER, etc.?
Alexander Mills
@AlexanderMills Sí, de acuerdo con los documentos que he vinculado a los comentarios en línea son válidos ADD . $foo # ADD . /bar
edhurtig
2
Sin embargo, @AlexanderMills observa que cambiar el comentario al final de la línea hará que Docker vuelva a ejecutar esa línea en una construcción de Docker, porque la "línea ha cambiado". Esto puede ser útil y / o molesto
Phylliida
Muy buen punto, quizás Docker debería ignorar el comentario jajaja
Alexander Mills
Es una característica y un error, supongo que Docker lo considerará una característica, y creo que tiene sentido en realidad
Alexander Mills,
4

Los comentarios de Dockerfile comienzan con '#', al igual que Python. Aquí hay un buen ejemplo ( 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"] 
DhruvPathak
fuente
Sí, pero a diferencia de Python, ¿no es el resto de la línea con un comando al comienzo de la línea? Es posible que desee actualizar su respuesta.
Peter Mortensen
solo una nota: MAINTAINER está en desuso, ahora se recomienda usar etiquetas:LABEL maintainer="[email protected]"
Alexei Martianov
3

Docker trata las líneas que comienzan con # como un comentario, a menos que la línea sea una directiva de analizador válida. Un marcador # en cualquier otro lugar de una línea se trata como un argumento.

código de ejemplo:

# this line is a comment

RUN echo 'we are running some # of cool things'

Salida:

we are running some # of cool things
Amin Shojaei
fuente
2

Formato

Aquí está el formato de Dockerfile:

Podemos usar #para comentar, #Commentpor ejemplo

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

Desde el archivo anterior cuando construimos el acoplador, omite la primera línea y pasa a la siguiente porque lo hemos comentado usando #

Prateek Naik
fuente