Wie mache ich einen Kommentar in einer Docker-Datei?


407

Ich schreibe eine Docker-Datei. Gibt es eine Möglichkeit, Kommentare in dieser Datei abzugeben?

Verfügt Docker über eine Kommentaroption, die den Rest einer Zeile übernimmt und ignoriert?

Antworten:


517

Sie können # als Zeilenanfang verwenden, um die Zeile zu kommentieren .

# Everything on this line is a comment

Hinweis: # als Kommentar kann nur am verwendet wird Anfang der Zeile.


9
Die Antwort auf die zweite Frage: "Hat Docker eine Kommentaroption, die den Rest einer Zeile übernimmt und ignoriert?" ist nein? " Docker behandelt Zeilen, die mit # beginnen, als Kommentar " .
Peter Mortensen

1
Können Sie Ihre Antwort aktualisieren und umfassender / vollständiger machen? Zum Beispiel die Beantwortung der zweiten Frage.
Peter Mortensen

8
Die Antwort von BMitch füllt wichtige Informationen aus, die in dieser Antwort fehlen.
Jonathan

99

Wie andere bereits erwähnt haben, werden Kommentare mit a bezeichnet #und hier dokumentiert . Im Gegensatz zu einigen Sprachen #muss sich das jedoch am Anfang der Zeile befinden. Wenn sie auf halbem Weg durch die Zeile auftreten, werden sie als Argument interpretiert und können zu unerwartetem Verhalten führen.

# 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

Es sollte auch beachtet werden, dass kürzlich Parser-Direktiven zur Docker-Datei hinzugefügt wurden, die dieselbe Syntax wie ein Kommentar haben. Sie müssen vor allen anderen Kommentaren oder Befehlen oben in der Datei angezeigt werden. Ursprünglich wurde diese Anweisung hinzugefügt, um das Escape-Zeichen so zu ändern, dass Windows unterstützt wird:

# escape=`

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

Die erste Zeile scheint ein Kommentar zu sein, ist jedoch eine Parser-Anweisung, mit der das Escape-Zeichen in ein Backtick geändert wird, damit die Befehle COPYund RUNden Backslash im Pfad verwenden können. Eine Parser-Direktive wird auch mit BuildKit verwendet , um den Frontend-Parser durch eine syntaxZeile zu ändern . Weitere Informationen dazu, wie dies in der Praxis verwendet wird, finden Sie in der experimentellen Syntax .

Bei einem mehrzeiligen Befehl werden die kommentierten Zeilen ignoriert, Sie müssen jedoch jede Zeile einzeln auskommentieren:

$ 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 für die Erwähnung "muss am Anfang der Zeile stehen" . Was ist mit der Fortsetzung der Leitung? Wenn eine Kommentarzeile mit \ endet, ist die nächste Zeile auch ein Kommentar? Mit anderen Worten, wenn ein mehrzeiliger Befehl auskommentiert werden sollte, müssten dann alle Zeilen mit #oder nur mit der ersten Zeile beginnen? Ein Experiment legt nahe, dass es das erstere ist. Diese Antwort könnte aktualisiert werden, um dies ebenfalls abzudecken (was es noch großartiger macht).
Peter Mortensen

1
@PeterMortensen Der Kommentar wird in jeder Zeile benötigt, Docker ignoriert alles bis zum Zeilenvorschub vollständig. Interessant für mich ist, dass sich der mehrzeilige Befehl über Kommentare erstrecken kann.
BMitch

19

Verwenden Sie die #Syntax für Kommentare

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

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

2
Aber können wir dieselbe Zeile wie RUN, COPY, MAINTAINER usw. kommentieren?
Alexander Mills

@ AlexanderMills Ja, laut den Dokumenten, die ich mit Inline-Kommentaren verlinkt habe, sind gültig ADD . $foo # ADD . /bar
edhurtig

2
@AlexanderMills Beachten Sie jedoch, dass das Ändern des Kommentars am Ende der Zeile dazu führt, dass Docker diese Zeile in einem Docker-Build erneut ausführt, da sich die "Zeile geändert hat". Dies kann nützlich und / oder ärgerlich sein
Phylliida

Sehr guter Punkt, vielleicht sollte Docker den Kommentar ignorieren lol
Alexander Mills

Das ist sowohl ein Feature als auch ein Bug, ich denke, Docker wird es als Feature betrachten, und ich denke, das macht tatsächlich Sinn
Alexander Mills

4

Dockerfile-Kommentare beginnen wie Python mit '#'. Hier ist ein gutes Beispiel ( kstaken / dockerfile-Beispiele ):

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

Ja, aber im Gegensatz zu Python ist nicht der Rest der Zeile mit einem Befehl am Anfang der Zeile? Möglicherweise möchten Sie Ihre Antwort aktualisieren.
Peter Mortensen

Nur eine Anmerkung: MAINTAINER ist veraltet, jetzt wird empfohlen, Etiketten zu verwenden:LABEL maintainer="foo@abc.com"
Alexei Martianov

3

Docker behandelt Zeilen, die mit # beginnen, als Kommentar, es sei denn, die Zeile ist eine gültige Parser-Direktive. Ein # -Marker an einer anderen Stelle in einer Zeile wird als Argument behandelt.

Beispielcode:

# this line is a comment

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

Ausgabe:

we are running some # of cool things

2

Format

Hier ist das Format der Dockerfile:

Wir können zum Beispiel #zu Kommentierungszwecken verwenden#Comment

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

Aus der obigen Datei wird beim Erstellen des Dockers die erste Zeile übersprungen und zur nächsten Zeile weitergeleitet, da wir sie mit kommentiert haben #

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.