diff --git a/builder/dockerfile/parser/parser.go b/builder/dockerfile/parser/parser.go index 4003cba465..42a84c630c 100644 --- a/builder/dockerfile/parser/parser.go +++ b/builder/dockerfile/parser/parser.go @@ -290,6 +290,10 @@ func Parse(rwc io.Reader) (*Result, error) { } currentLine++ + if isComment(scanner.Bytes()) { + // original line was a comment (processLine strips comments) + continue + } if isEmptyContinuationLine(bytesRead) { hasEmptyContinuationLine = true continue @@ -331,8 +335,12 @@ func trimWhitespace(src []byte) []byte { return bytes.TrimLeftFunc(src, unicode.IsSpace) } +func isComment(line []byte) bool { + return tokenComment.Match(trimWhitespace(line)) +} + func isEmptyContinuationLine(line []byte) bool { - return len(trimComments(trimWhitespace(line))) == 0 + return len(trimWhitespace(line)) == 0 } var utf8bom = []byte{0xEF, 0xBB, 0xBF} diff --git a/builder/dockerfile/parser/parser_test.go b/builder/dockerfile/parser/parser_test.go index bb057ecab3..5f354bb139 100644 --- a/builder/dockerfile/parser/parser_test.go +++ b/builder/dockerfile/parser/parser_test.go @@ -141,6 +141,13 @@ RUN something \ RUN another \ thing +RUN non-indented \ +# this is a comment + after-comment + +RUN indented \ + # this is an indented comment + comment `) result, err := Parse(dockerfile)