561 votes

Comment insérer un commentaire dans un Dockerfile?

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

Est-ce que Docker a 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 commenter n'a aucun effet : Docker continue de construire les couches commentées 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 blancs avant # sont autorisés) :

# faire des trucs
RUN apt-get update \
    # installer quelques paquets
    && apt-get install -y cron

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

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

12 votes

Donc la réponse à la deuxième question, "Est-ce que Docker a une option de commentaire qui prend le reste d'une ligne et l'ignore?", est non ? "Docker traite les lignes commençant par # comme un commentaire"

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 comble des 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 à certains langages, le # doit être placé au début de la ligne. S'ils apparaissent 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 pour COPY

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

Il convient également de noter que des directives du parseur ont récemment été ajoutées au fichier Dockerfile et 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 supporter Windows :

# escape=`

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

La première ligne, bien qu'elle semble être un commentaire, est en fait 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 son utilisation en pratique.

Avec une commande sur plusieurs 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

7 votes

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

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 sur les commentaires.

0 votes

Pour ceux qui envisagent de modifier l'article pour mettre en surbrillance la syntaxe, notez que la plupart des blocs de code ci-dessus sont des fichiers Docker, et non des scripts bash, où la mise en surbrillance de la syntaxe ne fait que distraire de l'objectif de l'article.

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 la documentation que j'ai liée, les commentaires en ligne sont valides ADD . $foo # ADD . /bar

2 votes

@AlexanderMills notez cependant que le changement du commentaire à la fin de la ligne forcera docker à relancer cette ligne lors de la construction de docker, car la "ligne a changé". Cela peut être utile et/ou ennuyeux.

10voto

DhruvPathak Points 16181

Les commentaires Dockerfile commencent par #, tout comme 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, le reste de la ligne n'est pas ignoré 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 # ailleurs dans une ligne est traité comme un argument.

exemple de code:

# cette ligne est un commentaire

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

Sortie:

nous exécutons certains # 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