Parcourir la source

Merge pull request #30039 from ripcurld0/specify_line_no_dockerfile_err

Specify in which line the Dockerfile parser failed
Brian Goff il y a 8 ans
Parent
commit
597843e790
2 fichiers modifiés avec 53 ajouts et 1 suppressions
  1. 1 1
      builder/dockerfile/builder.go
  2. 52 0
      integration-cli/docker_cli_build_test.go

+ 1 - 1
builder/dockerfile/builder.go

@@ -264,7 +264,7 @@ func (b *Builder) build(stdout io.Writer, stderr io.Writer, out io.Writer) (stri
 	total := len(b.dockerfile.Children)
 	for _, n := range b.dockerfile.Children {
 		if err := b.checkDispatch(n, false); err != nil {
-			return "", err
+			return "", perrors.Wrapf(err, "Dockerfile parse error line %d", n.StartLine)
 		}
 	}
 

+ 52 - 0
integration-cli/docker_cli_build_test.go

@@ -7388,3 +7388,55 @@ func (s *DockerSuite) TestBuildWorkdirCmd(c *check.C) {
 	c.Assert(err, checker.IsNil)
 	c.Assert(strings.Count(out, "Using cache"), checker.Equals, 1)
 }
+
+func (s *DockerSuite) TestBuildLineErrorOnBuild(c *check.C) {
+	name := "test_build_line_error_onbuild"
+
+	_, err := buildImage(name,
+		`FROM busybox
+  ONBUILD
+  `, true)
+	c.Assert(err.Error(), checker.Contains, "Dockerfile parse error line 2: ONBUILD requires at least one argument")
+}
+
+func (s *DockerSuite) TestBuildLineErrorUknownInstruction(c *check.C) {
+	name := "test_build_line_error_unknown_instruction"
+
+	_, err := buildImage(name,
+		`FROM busybox
+  RUN echo hello world
+  NOINSTRUCTION echo ba
+  RUN echo hello
+  ERROR
+  `, true)
+	c.Assert(err.Error(), checker.Contains, "Dockerfile parse error line 3: Unknown instruction: NOINSTRUCTION")
+}
+
+func (s *DockerSuite) TestBuildLineErrorWithEmptyLines(c *check.C) {
+	name := "test_build_line_error_with_empty_lines"
+
+	_, err := buildImage(name,
+		`
+  FROM busybox
+
+  RUN echo hello world
+
+  NOINSTRUCTION echo ba
+
+  CMD ["/bin/init"]
+  `, true)
+	c.Assert(err.Error(), checker.Contains, "Dockerfile parse error line 6: Unknown instruction: NOINSTRUCTION")
+}
+
+func (s *DockerSuite) TestBuildLineErrorWithComments(c *check.C) {
+	name := "test_build_line_error_with_comments"
+
+	_, err := buildImage(name,
+		`FROM busybox
+  # This will print hello world
+  # and then ba
+  RUN echo hello world
+  RUM echo ba
+  `, true)
+	c.Assert(err.Error(), checker.Contains, "Dockerfile parse error line 5: Unknown instruction: RUM")
+}