Должен ли хеш '#' в комментарии Dockerfile быть в столбце 1? - PullRequest
0 голосов
/ 15 мая 2018

Я видел Как мне сделать комментарий в Dockerfile? , и он не отвечает на этот вопрос.

Документация Docker неоднозначна в отношении расположения хеша в файле Docker:

Docker рассматривает строки, начинающиеся с #, как комментарий

Непонятно, разрешен ли пробел перед хэшем. Похоже, мое тестирование показывает, что оно разрешено, но я ищу окончательный ответ.

На этой же странице однозначно указано расположение хеша в файле .dockerignore:

Если строка в файле .dockerignore начинается с # в столбце 1, то эта строка считается комментарием и игнорируется перед интерпретацией CLI.

Отсутствие двусмысленности может показаться, что это не относится к комментариям Dockerfile.

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Документация Docker гласит:

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

Я бы взял это буквально, имея в виду, да, это должно быть в колонке 1.

Поскольку в вашем случае его нет в начале строки, и никакая команда не предшествует ему, тогда он не может быть аргументом ни к чему и останется комментарием.

Всего пару дней назад я нашел этот вопрос на SO: Jenkins-Run Docker: Сбой COPY: stat / var / lib / docker / tmp / docker-builder ...: такого файла или каталога нет

0 голосов
/ 25 июня 2018

Просмотр файлов CLI Docker:

В строке анализатора файлов 45 находим

line := strings.TrimLeftFunc(string(scannedBytes), unicode.IsSpace)

Обрезает пустые места слева. Так что, если не первый пробел будет #, это будет считаться комментарием для любого кода, который следует за левой обрезкой.

Функция isSpace проверяет наличие следующих символов

'\ t', '\ n', '\ v', '\ f', '\ r', '', U + 0085 (NEL), U + 00A0 (NBSP).

Все они будут удалены кодом из строки 45, пока не встретятся символы, не соответствующие этим спецификациям.

# Nothing trimmed
           # 1 tab 7 spaces trimmed
    0 # 4 spaces trimmed

Затем в строке 48 мы находим, где он проверяет, является ли это комментарием

  if len(line) > 0 && !strings.HasPrefix(line, "#") {

Таким образом, любые пробелы, зачеркнутые строками. TrimLeftFunc не будет «лишать законной силы» комментарий.

Итак, в заключение по вашему вопросу Должен ли хеш '#' в комментарии Dockerfile быть в столбце 1? ответ - нет, ему могут предшествовать пробелы и все же оставаться комментарием.

# Nothing trimmed   < -- comment
# 1 tab 7 spaces trimmed < -- comment
0 # 4 spaces trimmed  < -- not a comment
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...