561 votes

Comment puis-je faire un commentaire dans un Dockerfile?

Je suis en train d'écrire un Dockerfile. Y a-t-il un moyen de mettre des commentaires dans ce fichier?

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

0 votes

Je constate que si une couche est mise en cache, la mettre en commentaire n'a aucun effet : Docker continue de construire les couches mises en commentaire si elles sont déjà mises en cache.

700voto

Ranjeet Points 2220

Vous pouvez utiliser # au début d'une ligne pour commencer un commentaire (les espaces avant # sont autorisés) :

# faire quelque chose
RUN apt-get update \
    # installer quelques packages
    && apt-get install -y cron

Les # au milieu d'une chaîne de caractères sont passés à la commande elle-même, par exemple :

RUN echo 'nous exécutons quelques # de choses cool'

12 votes

Ainsi, la réponse à la deuxième question, "Docker a-t-il une option de commentaire qui prend le reste d'une ligne et l'ignore?", est non? "Docker traite les lignes commençant par # comme des commentaires".

1 votes

Pouvez-vous mettre à jour votre réponse et la rendre plus complète/complète? Par exemple, en répondant à la deuxième question.

9 votes

La réponse de BMitch complète les informations critiques qui manquent dans cette réponse.

136voto

BMitch Points 3744

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

# Ceci est un commentaire

COPY test_dir target_dir # Ceci n'est pas un commentaire, c'est un argument à COPY

RUN echo hello world # Ceci est un argument à RUN mais le shell peut l'ignorer

Il convient également de noter que des directives du parseur ont récemment été ajoutées au Dockerfile qui ont la même syntaxe qu'un commentaire. Elles 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 afin de 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 du parseur pour changer le caractère d'échappement en un backtick afin que les commandes COPY et RUN puissent utiliser le backslash dans le chemin. Une directive du parseur est également utilisée avec BuildKit pour changer le parseur frontal avec une ligne syntax. Consultez la syntaxe expérimentale pour plus de détails sur la manière dont elle est utilisée en pratique.

Avec une commande multi-ligne, 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

7 votes

+1 pour avoir mentionné "doit être au début de la ligne". Et pour la continuation de 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 sur plusieurs lignes devait être commentée, toutes les lignes devraient-elles commencer par # ou seulement la première ligne ? Une expérience suggère que c'est le premier cas. Cette réponse pourrait être mise à jour pour inclure cela également (ce qui la rendrait encore meilleure).

2 votes

@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-ligne peut s'étendre à travers les commentaires.

0 votes

Pour ceux qui envisagent de modifier le message pour la coloration syntaxique, notez que la plupart des blocs de code ci-dessus sont des Dockerfiles, et non des scripts bash, où la coloration syntaxique est seulement distrayante par rapport à l'objectif du message.

20voto

htech Points 443

Utilisez la syntaxe # pour les commentaires

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

# Mon commentaire ici
RUN echo 'nous exécutons des choses cool'

3 votes

Mais pouvons-nous commenter sur la même ligne que RUN, COPY, MAINTAINER, etc?

0 votes

@AlexanderMills Oui, selon les documents que j'ai liés, les commentaires en ligne sont valides ADD . $foo # ADD . /bar

2 votes

@AlexanderMills note cependant que changer le commentaire à la fin de la ligne causera à Docker de relancer cette ligne lors d'une construction Docker, car la "ligne a changé". Cela peut être utile et/ou ennuyeux.

10voto

DhruvPathak Points 16181

Les commentaires dans les Dockerfile commencent par #, tout comme en Python. kstaken a de bons exemples:

# Installer une version plus récente de MongoDB que celle incluse dans les dépôts Ubuntu par défaut.

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

0 votes

Oui, mais contrairement à Python, pas le reste de la ligne avec une commande au début de la ligne? Vous voudrez peut-être mettre à jour votre réponse.

0 votes

Just a note: MAINTAINER est obsolète, il est maintenant conseillé d'utiliser des balises: LABEL maintainer="foo@abc.com"

4voto

Amin Shojaei Points 11

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.

code exemple :

# cette ligne est un commentaire

RUN echo 'nous exécutons certaines # de choses cool'

Résultat :

nous exécutons certaines # de choses cool

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X