Как мне сделать комментарий в Dockerfile?

408

Я пишу Dockerfile. Есть ли способ сделать комментарии в этом файле?

Есть ли в Docker опция комментария, которая берет остальную часть строки и игнорирует ее?

kpie
источник

Ответы:

519

Вы можете использовать # как начало строки, чтобы прокомментировать строку .

# Everything on this line is a comment

Примечание: # в качестве комментария можно использовать только в начале строки.

Ranjeet
источник
9
Итак, ответ на второй вопрос: «Есть ли в Docker опция комментария, которая берет оставшуюся часть строки и игнорирует ее?» , нет? Msgstr " Докер обрабатывает строки, начинающиеся с #, как комментарий " .
Питер Мортенсен
1
Можете ли вы обновить свой ответ и сделать его более полным / полным? Например, отвечая на второй вопрос.
Питер Мортенсен
8
Ответ BMitch заполняет важную информацию, которая отсутствует в этом ответе.
Джонатан
99

Как уже упоминали другие, комментарии отмечены с #и документированы здесь . Однако, в отличие от некоторых языков, он #должен находиться в начале строки. Если они происходят частично через строку, они интерпретируются как аргумент и могут привести к неожиданному поведению.

# 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

Следует также отметить, что в Dockerfile недавно были добавлены директивы синтаксического анализатора, которые имеют тот же синтаксис, что и комментарий. Они должны появляться в верхней части файла, перед любыми другими комментариями или командами. Первоначально эта директива была добавлена ​​для изменения escape-символа для поддержки Windows:

# escape=`

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

Первая линия, в то время как это , кажется, комментарий, это парсер директива , чтобы изменить характер побега к кавычке так , что COPYи RUNкоманды могут использовать обратную косую черту в пути. Директива синтаксического анализатора также используется с BuildKit для изменения синтаксического анализатора внешнего интерфейса со syntaxстрокой. Посмотрите экспериментальный синтаксис для более подробной информации о том, как это используется на практике.

С помощью многострочной команды закомментированные строки игнорируются, но вы должны закомментировать каждую строку отдельно:

$ 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
источник
3
+1 за упоминание "должно быть в начале строки" . Как насчет продолжения линии? Если строка комментария заканчивается на \, будет ли следующая строка также комментарием? Другими словами, если многострочная команда должна быть закомментирована, все ли строки должны начинаться с #или только с первой строки? Эксперимент предполагает, что это первое. Этот ответ может быть обновлен, чтобы охватить это также (делая его еще более удивительным).
Питер Мортенсен
1
@PeterMortensen Комментарий необходим для каждой строки, докер полностью игнорирует все до перевода строки. Что меня интересует, так это то, что многострочная команда может охватывать комментарии.
BMitch
19

Используйте #синтаксис для комментариев

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

# My comment here
RUN echo 'we are running some cool things'
edhurtig
источник
2
но можем ли мы прокомментировать ту же строку, что и RUN, COPY, MAINTAINER и т. д.?
Александр Миллс
@AlexanderMills Да, в соответствии с документами, на которые я ADD . $foo # ADD . /bar
ссылаюсь,
2
@AlexanderMills отмечает, однако, что изменение комментария в конце строки приведет к тому, что docker повторно запустит эту строку при сборке Docker, поскольку «строка изменилась». Это может быть полезно и / или раздражает
Phylliida
Очень хороший момент, возможно, докер должен проигнорировать комментарий lol
Александр Миллс
Это и особенность, и ошибка, я полагаю, Докер сочтет это особенностью, и я думаю, что это имеет смысл на самом деле
Александр Миллс,
4

Комментарии в Dockerfile начинаются с '#', как и в Python. Вот хороший пример ( 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
источник
Да, но, в отличие от Python, не в конце строки с командой в начале строки? Вы можете обновить свой ответ.
Питер Мортенсен
просто примечание: MAINTAINER устарела, сейчас советуют использовать ярлыки:LABEL maintainer="foo@abc.com"
Алексей
3

Docker рассматривает строки, начинающиеся с #, как комментарий, если строка не является допустимой директивой синтаксического анализатора. Маркер # в любом месте строки рассматривается как аргумент.

пример кода:

# this line is a comment

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

Вывод:

we are running some # of cool things
Амин Шоджаи
источник
2

Формат

Вот формат Dockerfile:

Мы можем использовать #для комментирования цели, #Commentнапример

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

Из приведенного выше файла, когда мы собираем докер, он пропускает первую строку и переходит к следующей строке, потому что мы прокомментировали его, используя #

Пратик Найк
источник