Jak zrobić komentarz w Dockerfile?

405

Piszę plik Docker. Czy istnieje sposób na komentowanie w tym pliku?

Czy Docker ma opcję komentowania, która zajmuje resztę linii i ignoruje ją?

kpie
źródło

Odpowiedzi:

514

Możesz użyć # jako początku linii, aby skomentować linię .

# Everything on this line is a comment

Uwaga: # jako komentarza można stosować tylko na początku wiersza.

Ranjeet
źródło
8
Więc odpowiedź na drugie pytanie: „Czy Docker ma opcję komentowania, która zajmuje resztę linii i ignoruje ją?” , nie jest? Docker traktuje wiersze rozpoczynające się od # jako komentarz .
Peter Mortensen
1
Czy możesz zaktualizować swoją odpowiedź i uczynić ją bardziej kompleksową / kompletną? Na przykład odpowiadając na drugie pytanie.
Peter Mortensen
7
Odpowiedź BMitcha zawiera najważniejsze informacje, których brakuje w tej odpowiedzi.
Jonathan
99

Jak wspomnieli inni, komentarze są oznaczone literą a #i są tutaj udokumentowane . Jednak, w przeciwieństwie do niektórych języków, #musi znajdować się na początku wiersza. Jeśli występują one w połowie linii, są interpretowane jako argument i mogą powodować nieoczekiwane zachowanie.

# 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

Należy również zauważyć, że do Dockerfile dodano niedawno dyrektywy analizatora składni, które mają taką samą składnię jak komentarz. Muszą pojawić się na górze pliku, przed innymi komentarzami lub poleceniami. Pierwotnie dodano tę dyrektywę w celu zmiany znaku zmiany znaczenia w celu obsługi systemu Windows:

# escape=`

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

Pierwszy wiersz, choć wydaje się komentarzem, jest dyrektywą analizatora składni, która zmienia znak zmiany znaczenia na lewy, aby polecenia COPYi RUNmogły używać odwrotnego ukośnika na ścieżce. Dyrektywa parsera jest również używana z BuildKit do zmiany parsera frontonu za pomocą syntaxlinii. Zobacz składnię eksperymentalną, aby uzyskać więcej informacji na temat tego, jak jest on wykorzystywany w praktyce.

W przypadku polecenia wieloliniowego komentowane linie są ignorowane, ale musisz komentować każdą linię osobno:

$ 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
źródło
3
+1 za wzmiankę „musi znajdować się na początku wiersza” . Co z kontynuacją linii? Jeśli wiersz komentarza kończy się na \, czy następny wiersz będzie także komentarzem? Innymi słowy, jeśli komentarz do wiersza miałby zostać zakomentowany, czy wszystkie linie muszą zaczynać się od, #czy tylko pierwszej linii? Eksperyment sugeruje, że to ten pierwszy. Ta odpowiedź może zostać zaktualizowana, aby ją również uwzględnić (co czyni ją jeszcze bardziej niesamowitą).
Peter Mortensen
1
@PeterMortensen Komentarz jest potrzebny na każdej linii, doker całkowicie ignoruje wszystko aż do kanału. Interesujące jest dla mnie to, że polecenie wieloliniowe może obejmować komentarze.
BMitch
19

Użyj #komentarzy do komentarzy

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

# My comment here
RUN echo 'we are running some cool things'
edhurtig
źródło
2
ale czy możemy komentować tę samą linię co RUN, COPY, MAINTAINER itp.?
Alexander Mills
@AlexanderMills Tak zgodnie z dokumentami, które podłączyłem do wbudowanych komentarzy są ważne ADD . $foo # ADD . /bar
edhurtig
2
@AlexanderMills zauważa jednak, że zmiana komentarza na końcu linii spowoduje, że doker uruchomi tę linię w kompilacji dokera, ponieważ „linia się zmieniła”. Może to być przydatne i / lub denerwujące
Phylliida
Bardzo dobra uwaga, być może doker powinien zignorować komentarz lol
Alexander Mills
To jest zarówno funkcja, jak i błąd, myślę, że Docker uzna to za funkcję, i myślę, że to ma sens
Alexander Mills
4

Komentarze Dockerfile zaczynają się od „#”, podobnie jak Python. Oto dobry przykład ( 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
źródło
Tak, ale w przeciwieństwie do Pythona nie jest to reszta linii z poleceniem na początku linii? Możesz zaktualizować swoją odpowiedź.
Peter Mortensen
tylko uwaga: MAINTAINER jest przestarzałe, teraz zaleca się stosowanie etykiet:LABEL maintainer="[email protected]"
Aleksiej Martianow
2

Format

Oto format pliku Dockerfile:

Możemy na przykład użyć #do komentowania#Comment

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

Z powyższego pliku podczas budowania okna dokowanego pomija pierwszy wiersz i przechodzi do następnego wiersza, ponieważ skomentowaliśmy go za pomocą #

Prateek Naik
źródło
2

Docker traktuje wiersze rozpoczynające się od # jako komentarz, chyba że wiersz jest poprawną dyrektywą analizatora składni. Znacznik # w dowolnym miejscu w linii jest traktowany jako argument.

przykład:

# this line is a comment

RUN echo 'we are running some # of cool things'
Amin Shojaei
źródło