Comment faire un commentaire dans un Dockerfile?

408

J'écris un Dockerfile. Existe-t-il un moyen de faire des commentaires dans ce fichier?

Docker a-t-il une option de commentaire qui prend le reste d'une ligne et l'ignore?

kpie
la source

Réponses:

518

Vous pouvez utiliser # comme début de ligne pour commenter la ligne .

# Everything on this line is a comment

Remarque: # en tant que commentaire ne peut être utilisé qu'au début de la ligne.

Ranjeet
la source
9
Ainsi, la réponse à la deuxième question, "Docker a-t-elle une option de commentaire qui prend le reste d'une ligne et l'ignore?" , non? " Docker traite les lignes qui commencent par # comme un commentaire " .
Peter Mortensen le
1
Pouvez-vous mettre à jour votre réponse et la rendre plus complète / complète? Par exemple, répondre à la deuxième question.
Peter Mortensen le
8
La réponse de BMitch remplit les informations critiques manquantes dans cette réponse.
Jonathan
99

Comme d'autres l'ont mentionné, les commentaires sont référencés par un #et sont documentés ici . Cependant, contrairement à certaines langues, le #doit être au début de la ligne. S'ils se produisent au milieu de la ligne, ils sont interprétés comme un argument et peuvent entraîner un comportement inattendu.

# 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

Il convient également de noter que des directives d'analyse syntaxique ont récemment été ajoutées au Dockerfile qui ont la même syntaxe qu'un commentaire. Ils doivent apparaître en haut du fichier, avant tout autre commentaire ou commande. À l'origine, cette directive a été ajoutée pour changer le caractère d'échappement pour prendre en charge Windows:

# escape=`

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

La première ligne, bien qu'elle semble être un commentaire, est une directive de l'analyseur pour changer le caractère d'échappement en backtick afin que les commandes COPYet RUNpuissent utiliser la barre oblique inverse dans le chemin. Une directive analyseur est également utilisée avec BuildKit pour modifier l'analyseur frontal avec une syntaxligne. Voir la syntaxe expérimentale pour plus de détails sur la façon dont elle est utilisée dans la pratique.

Avec une commande multi-lignes, les lignes commentées sont ignorées, mais vous devez commenter chaque ligne individuellement:

$ 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
la source
3
+1 pour mentionner "doit être au début de la ligne" . Et la continuation de la ligne? Si une ligne de commentaire se termine par \, la ligne suivante sera-t-elle également un commentaire? En d'autres termes, si une commande multi-lignes devait être commentée, toutes les lignes devraient-elles commencer par #ou uniquement la première ligne? Une expérience suggère que c'est la première. Cette réponse pourrait être mise à jour pour couvrir cela également (ce qui la rend encore plus impressionnante).
Peter Mortensen le
1
@PeterMortensen Le commentaire est nécessaire sur chaque ligne, docker ignore complètement tout jusqu'au saut de ligne. Ce qui m'intéresse, c'est que la commande multi-lignes peut s'étendre sur plusieurs commentaires.
BMitch
19

Utilisez la #syntaxe pour les commentaires

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

# My comment here
RUN echo 'we are running some cool things'
edhurtig
la source
2
mais pouvons-nous commenter sur la même ligne que RUN, COPY, MAINTAINER, etc.?
Alexander Mills
@AlexanderMills Oui selon les documents que j'ai liés aux commentaires en ligne sont valides ADD . $foo # ADD . /bar
edhurtig
2
@AlexanderMills note cependant que si vous modifiez le commentaire à la fin de la ligne, Docker réexécutera cette ligne sur une version Docker, car la "ligne a changé". Cela peut être utile et / ou ennuyeux
Phylliida
Très bon point, peut-être que le docker devrait ignorer le commentaire lol
Alexander Mills
C'est à la fois une fonctionnalité et un bug, je suppose que Docker le considérera comme une fonctionnalité, et je pense que cela a du sens en fait
Alexander Mills
4

Les commentaires Dockerfile commencent par '#', tout comme Python. Voici un bon exemple ( 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
la source
Oui, mais contrairement à Python, ce n'est pas le reste de la ligne avec une commande au début de la ligne? Vous voudrez peut-être mettre à jour votre réponse.
Peter Mortensen le
juste une note: MAINTAINER est déconseillé, maintenant conseillé d'utiliser des étiquettes:LABEL maintainer="[email protected]"
Alexei Martianov
3

Docker traite les lignes qui commencent par # comme un commentaire, sauf si la ligne est une directive d'analyseur valide. Un marqueur # n'importe où ailleurs dans une ligne est traité comme un argument.

exemple de code:

# this line is a comment

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

Production:

we are running some # of cool things
Amin Shojaei
la source
2

Format

Voici le format du Dockerfile:

Nous pouvons utiliser #à des fins de commentaire #Commentpar exemple

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

À partir du fichier ci-dessus lorsque nous construisons le docker, il saute la première ligne et passe à la ligne suivante parce que nous l'avons commenté en utilisant #

Prateek Naik
la source