dockerimg: improve errors if dockerfile fails to build

Updates #83
diff --git a/dockerimg/dockerimg.go b/dockerimg/dockerimg.go
index 3fb8b88..461a760 100644
--- a/dockerimg/dockerimg.go
+++ b/dockerimg/dockerimg.go
@@ -662,6 +662,7 @@
 
 	var initFiles map[string]string
 	var dockerfilePath string
+	var generatedDockerfile string
 
 	// TODO: prefer a "Dockerfile.sketch" so users can tailor any env to this tool.
 	if len(candidates) == 1 && strings.ToLower(filepath.Base(candidates[0])) == "dockerfile" {
@@ -704,18 +705,18 @@
 			APIKey: modelAPIKey,
 			HTTPC:  http.DefaultClient,
 		}
-		dockerfile, err := createDockerfile(ctx, srv, initFiles, subPathWorkingDir)
+		generatedDockerfile, err = createDockerfile(ctx, srv, initFiles, subPathWorkingDir)
 		if err != nil {
 			return "", fmt.Errorf("create dockerfile: %w", err)
 		}
 		dockerfilePath = filepath.Join(cwd, tmpSketchDockerfile)
-		if err := os.WriteFile(dockerfilePath, []byte(dockerfile), 0o666); err != nil {
+		if err := os.WriteFile(dockerfilePath, []byte(generatedDockerfile), 0o666); err != nil {
 			return "", err
 		}
 		defer os.Remove(dockerfilePath)
 
 		if verbose {
-			fmt.Fprintf(os.Stderr, "generated Dockerfile in %s:\n\t%s\n\n", time.Since(start).Round(time.Millisecond), strings.Replace(dockerfile, "\n", "\n\t", -1))
+			fmt.Fprintf(os.Stderr, "generated Dockerfile in %s:\n\t%s\n\n", time.Since(start).Round(time.Millisecond), strings.Replace(generatedDockerfile, "\n", "\n\t", -1))
 		}
 	}
 
@@ -750,7 +751,14 @@
 
 	err = run(ctx, "docker build", cmd)
 	if err != nil {
-		return "", fmt.Errorf("docker build failed: %v", err)
+		var msg string
+		if generatedDockerfile != "" {
+			if !verbose {
+				fmt.Fprintf(os.Stderr, "Generated Dockerfile:\n\t%s\n\n", strings.Replace(generatedDockerfile, "\n", "\n\t", -1))
+			}
+			msg = fmt.Sprintf("\n\nThe generated Dockerfile failed to build.\nYou can override it by committing a Dockerfile to your project.")
+		}
+		return "", fmt.Errorf("docker build failed: %v%s", err, msg)
 	}
 	fmt.Printf("built docker image %s in %s\n", imgName, time.Since(start).Round(time.Millisecond))
 	return imgName, nil