我已经看过如何在Dockerfile中发表评论?它没有回答这个问题.
该泊坞窗文档关于在Dockerfile哈希的位置是一把双刃剑:
Docker将以#开头的行视为注释
目前尚不清楚是否允许哈希之前的空格.我的测试似乎表明它是允许的,但我正在寻找一个确定的答案.
关于文件中散列的位置,同一页面是明确的.dockerignore:
如果.dockerignore文件中的一行以第1列中的#开头,则该行被视为注释,并在CLI解释之前被忽略.
缺乏歧义似乎暗示相同并不适用于Dockerfile注释.
查看 Docker CLI 文件:
在文件解析器第 45 行我们发现
line := strings.TrimLeftFunc(string(scannedBytes), unicode.IsSpace)
Run Code Online (Sandbox Code Playgroud)
它从左侧修剪空白区域。因此,如果非第一个空格字符是 a ,#那么它将被视为左侧修剪后面的任何代码的注释。
isSpace函数检查以下字符
'\t'、'\n'、'\v'、'\f'、'\r'、' '、U+0085 (NEL)、U+00A0 (NBSP)。
这些都将被第 45 行的代码删除,直到遇到不符合这些规范的字符。
# Nothing trimmed
# 1 tab 7 spaces trimmed
0 # 4 spaces trimmed
Run Code Online (Sandbox Code Playgroud)
然后在第 48 行我们找到它测试是否是注释的位置
if len(line) > 0 && !strings.HasPrefix(line, "#") {
Run Code Online (Sandbox Code Playgroud)
因此,任何被strings.TrimLeftFunc删除的空格字符都不会“使”注释“无效”。
因此,关于您的问题,Dockerfile 注释中的哈希“#”是否需要位于第 1 列?答案是否定的,它前面可以有空格字符,但仍然是注释。
# Nothing trimmed < -- comment
# 1 tab 7 spaces trimmed < -- comment
0 # 4 spaces trimmed < -- not a comment
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1257 次 |
| 最近记录: |