diff --git a/cmd/podman/common/build.go b/cmd/podman/common/build.go index 2abf62520e8d..d6a1dc84e9bb 100644 --- a/cmd/podman/common/build.go +++ b/cmd/podman/common/build.go @@ -202,10 +202,7 @@ func ParseBuildOpts(cmd *cobra.Command, args []string, buildOpts *BuildFlagsWrap // No context directory or URL was specified. Try to use the home of // the first locally-available Containerfile. for i := range containerFiles { - if strings.HasPrefix(containerFiles[i], "http://") || - strings.HasPrefix(containerFiles[i], "https://") || - strings.HasPrefix(containerFiles[i], "git://") || - strings.HasPrefix(containerFiles[i], "github.com/") { + if isURL(containerFiles[i]) { continue } absFile, err := filepath.Abs(containerFiles[i]) @@ -239,6 +236,15 @@ func ParseBuildOpts(cmd *cobra.Command, args []string, buildOpts *BuildFlagsWrap default: return nil, fmt.Errorf("no Containerfile or Dockerfile specified or found in context directory, %s: %w", contextDir, syscall.ENOENT) } + } else { + for _, f := range containerFiles { + if isURL(f) || f == "/dev/stdin" { + continue + } + if !utils.FileExists(f) { + return nil, fmt.Errorf("the specified Containerfile or Dockerfile does not exist, %s: %w", f, syscall.ENOENT) + } + } } var logFile *os.File @@ -628,3 +634,10 @@ func parseDockerignore(ignoreFile string) ([]string, error) { } return excludes, nil } + +func isURL(s string) bool { + return strings.HasPrefix(s, "http://") || + strings.HasPrefix(s, "https://") || + strings.HasPrefix(s, "git://") || + strings.HasPrefix(s, "github.com/") +}