Come posso fare un commento in un file Docker?


408

Sto scrivendo un file Docker. C'è un modo per fare commenti in questo file?

Docker ha un'opzione di commento che prende il resto di una riga e la ignora?

Risposte:


518

Puoi usare # come inizio della riga per commentare la riga .

# Everything on this line is a comment

Nota: # come commento può essere utilizzato solo all'inizio della riga.


9
Quindi la risposta alla seconda domanda, "Docker ha un'opzione di commento che prende il resto di una riga e la ignora?" , è no? " Docker tratta le righe che iniziano con # come commento " .
Peter Mortensen,

1
Puoi aggiornare la tua risposta e renderla più completa / completa? Ad esempio, rispondendo alla seconda domanda.
Peter Mortensen,

8
La risposta di BMitch riempie le informazioni critiche che mancano in questa risposta.
Jonathan,

99

Come altri hanno già detto, i commenti sono indicati con un #e sono documentati qui . Tuttavia, a differenza di alcune lingue, #deve essere all'inizio della riga. Se si verificano a metà della linea, vengono interpretati come argomento e possono comportare comportamenti imprevisti.

# 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

Va inoltre notato che le direttive parser sono state recentemente aggiunte al Dockerfile che hanno la stessa sintassi di un commento. Devono apparire nella parte superiore del file, prima di qualsiasi altro commento o comando. Inizialmente, questa direttiva è stata aggiunta per modificare il carattere di escape per supportare Windows:

# escape=`

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

La prima riga, sebbene sembri essere un commento, è una direttiva parser per cambiare il carattere di escape in un backtick in modo che i comandi COPYe RUNpossano usare la barra rovesciata nel percorso. Una direttiva parser viene utilizzata anche con BuildKit per modificare il parser frontend con una syntaxriga. Vedi la sintassi sperimentale per maggiori dettagli su come questo viene utilizzato in pratica.

Con un comando multilinea, le righe commentate vengono ignorate, ma è necessario commentare ogni riga singolarmente:

$ 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 per la menzione "deve essere all'inizio della riga" . Che dire della continuazione della linea? Se una riga di commento termina con \, anche la riga successiva sarà un commento? In altre parole, se si dovesse commentare un comando multilinea, tutte le righe dovrebbero iniziare con #o solo la prima riga? Un esperimento suggerisce che è il primo. Questa risposta potrebbe essere aggiornata per coprire anche quella (rendendola ancora più fantastica).
Peter Mortensen,

1
@PeterMortensen Il commento è necessario su ogni riga, la finestra mobile ignora completamente tutto fino all'alimentazione di linea. La cosa interessante per me è che il comando multilinea può estendersi tra i commenti.
BMitch

19

Usa la #sintassi per i commenti

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

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

2
ma possiamo commentare sulla stessa riga di RUN, COPY, MAINTAINER, ecc.?
Alexander Mills,

@AlexanderMills Sì, secondo i documenti che ho collegato ai commenti in linea sono validi ADD . $foo # ADD . /bar
edhurtig,

2
@AlexanderMills nota tuttavia che cambiando il commento alla fine della riga, la finestra mobile verrà rieseguita su una build della finestra mobile, perché la "linea è cambiata". Questo può essere utile e / o fastidioso
Phylliida,

Ottimo punto, forse docker dovrebbe ignorare il commento lol
Alexander Mills

Questa è sia una funzionalità che un bug, immagino che Docker la considererà una funzionalità e penso che abbia un senso in realtà
Alexander Mills

4

I commenti sul file Docker iniziano con '#', proprio come Python. Ecco un buon esempio ( kstaken / dockerfile-esempi ):

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

Sì, ma a differenza di Python non è il resto della riga con un comando all'inizio della riga? Potresti voler aggiornare la tua risposta.
Peter Mortensen,

solo una nota: MAINTAINER è deprecato, ora si consiglia di utilizzare le etichette:LABEL maintainer="foo@abc.com"
Alexei Martianov

3

Docker tratta le righe che iniziano con # come commento, a meno che la riga non sia una direttiva parser valida. Un marcatore # in qualsiasi altra parte di una riga viene trattato come un argomento.

codice di esempio:

# this line is a comment

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

Produzione:

we are running some # of cool things

2

Formato

Ecco il formato del Dockerfile:

Possiamo usare ad esempio #per commentare#Comment

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

Dal file sopra quando costruiamo la finestra mobile, salta la prima riga e passa alla riga successiva perché l'abbiamo commentata usando #

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.