Como faço para comentar em um Dockerfile?


407

Estou escrevendo um Dockerfile. Existe uma maneira de fazer comentários neste arquivo?

O Docker tem uma opção de comentário que pega o restante de uma linha e a ignora?

Respostas:


517

Você pode usar # como início da linha para comentar a linha .

# Everything on this line is a comment

Nota: # como um comentário só pode ser usado no início da linha.


9
Portanto, a resposta para a segunda pergunta, "O Docker tem uma opção de comentário que pega o restante da linha e a ignora?" , é não? "O Docker trata as linhas que começam com # como um comentário " .
22419 Peter Mortensen

11
Você pode atualizar sua resposta e torná-la mais abrangente / completa? Por exemplo, respondendo à segunda pergunta.
Peter Mortensen

8
A resposta da BMitch preenche informações críticas que estão faltando nessa resposta.
18719 Jonathan

99

Como outros já mencionaram, os comentários são referenciados com a #e estão documentados aqui . No entanto, ao contrário de alguns idiomas, o #deve estar no início da linha. Se ocorrerem parcialmente, serão interpretados como um argumento e poderão resultar em comportamento inesperado.

# 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

Também deve ser observado que as diretivas do analisador foram recentemente adicionadas ao Dockerfile, que possuem a mesma sintaxe que um comentário. Eles precisam aparecer na parte superior do arquivo, antes de qualquer outro comentário ou comando. Originalmente, essa diretiva foi adicionada para alterar o caractere de escape para dar suporte ao Windows:

# escape=`

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

A primeira linha, embora pareça ser um comentário, é uma diretiva de analisador para alterar o caractere de escape para um backtick, para que os comandos COPYe RUNpossam usar a barra invertida no caminho. Uma diretiva de analisador também é usada com o BuildKit para alterar o analisador de front-end com uma syntaxlinha. Veja a sintaxe experimental para obter mais detalhes sobre como isso está sendo usado na prática.

Com um comando de várias linhas, as linhas comentadas são ignoradas, mas você precisa comentar cada linha individualmente:

$ 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 para mencionar "deve estar no início da linha" . E a continuação da linha? Se uma linha de comentário terminar com \, a próxima linha também será um comentário? Em outras palavras, se um comando com várias linhas fosse comentado, todas as linhas precisariam começar com #ou apenas a primeira linha? Um experimento sugere que é o primeiro. Esta resposta pode ser atualizada para cobrir isso também (tornando-a ainda mais impressionante).
Peter Mortensen

11
@PeterMortensen O comentário é necessário em cada linha, o docker ignora completamente tudo, até o avanço de linha. O que é interessante para mim é que o comando de várias linhas pode abranger comentários.
BMitch

19

Use a #sintaxe para comentários

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

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

2
mas podemos comentar na mesma linha que EXECUTAR, COPIAR, MANTER, etc?
Alexander Mills

@AlexanderMills Sim de acordo com os documentos I ligados a comentários inline são válidos ADD . $foo # ADD . /bar
edhurtig

2
O @AlexanderMills observa, no entanto, que alterar o comentário no final da linha fará com que o docker execute novamente essa linha em uma construção do docker, porque a "linha foi alterada". Isso pode ser útil e / ou irritante
Phylliida

Ponto muito bom, talvez o estivador deva ignorar o comentário lol
Alexander Mills

Isso é um recurso e um bug, acho que o Docker o considerará um recurso, e acho que faz sentido, na verdade #
Alexander Mills

4

Os comentários do Dockerfile começam com '#', assim como o Python. Aqui está um bom exemplo ( 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"] 

Sim, mas ao contrário do Python, o resto da linha não tem um comando no início da linha? Você pode atualizar sua resposta.
Peter Mortensen

apenas uma observação: MAINTAINER está obsoleto, agora aconselhado a usar rótulos: #LABEL maintainer="foo@abc.com"
Alexei Martianov

3

O Docker trata as linhas que começam com # como um comentário, a menos que a linha seja uma diretiva de analisador válida. Um marcador # em qualquer outro lugar da linha é tratado como argumento.

código de exemplo:

# this line is a comment

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

Resultado:

we are running some # of cool things

2

Formato

Aqui está o formato do Dockerfile:

Podemos usar #para fins de comentário, #Commentpor exemplo

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

A partir do arquivo acima, quando criamos a janela de encaixe, ela pula a primeira linha e passa para a próxima linha porque a comentamos usando #

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.