Просмотр файлов 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