diff --git a/cmd/executor/cmd/root.go b/cmd/executor/cmd/root.go index 7f0339c5d..ea2634d1e 100644 --- a/cmd/executor/cmd/root.go +++ b/cmd/executor/cmd/root.go @@ -395,7 +395,12 @@ func copyDockerfile() error { return errors.Wrap(err, "copying dockerfile") } dockerignorePath := opts.DockerfilePath + ".dockerignore" - if util.FilepathExists(dockerignorePath) { + containerignorePath := opts.DockerfilePath + ".containerignore" + if util.FilepathExists(containerignorePath) { + if _, err := util.CopyFile(containerignorePath, config.DockerfilePath+".containerignore", util.FileContext{}, util.DoNotChangeUID, util.DoNotChangeGID, fs.FileMode(0o600), true); err != nil { + return errors.Wrap(err, "copying Dockerfile.containerignore") + } + } else if util.FilepathExists(dockerignorePath) { if _, err := util.CopyFile(dockerignorePath, config.DockerfilePath+".dockerignore", util.FileContext{}, util.DoNotChangeUID, util.DoNotChangeGID, fs.FileMode(0o600), true); err != nil { return errors.Wrap(err, "copying Dockerfile.dockerignore") } diff --git a/integration/.containerignore b/integration/.containerignore new file mode 100644 index 000000000..ec574e06f --- /dev/null +++ b/integration/.containerignore @@ -0,0 +1,3 @@ +# A .dockerignore file to make sure dockerignore support works +ignore/** +!ignore/foo diff --git a/integration/dockerfiles/Dockerfile_dockerignore_relative.containerignore b/integration/dockerfiles/Dockerfile_dockerignore_relative.containerignore new file mode 100644 index 000000000..c825fe6c8 --- /dev/null +++ b/integration/dockerfiles/Dockerfile_dockerignore_relative.containerignore @@ -0,0 +1,3 @@ +# A .containerignore file to make sure containerignore support works +ignore_relative/** +!ignore_relative/foo diff --git a/pkg/util/fs_util.go b/pkg/util/fs_util.go index c8d5a613a..864c443a6 100644 --- a/pkg/util/fs_util.go +++ b/pkg/util/fs_util.go @@ -775,17 +775,25 @@ func NewFileContextFromDockerfile(dockerfilePath, buildcontext string) (FileCont // getExcludedFiles returns a list of files to exclude from the .dockerignore func getExcludedFiles(dockerfilePath, buildcontext string) ([]string, error) { - path := dockerfilePath + ".dockerignore" - if !FilepathExists(path) { + var path string + + dockerignorePath := dockerfilePath + ".dockerignore" + containerignorePath := dockerfilePath + ".containerignore" + if FilepathExists(containerignorePath) { + path = containerignorePath + } else if FilepathExists(filepath.Join(buildcontext, ".containerignore")) { + path = filepath.Join(buildcontext, ".containerignore") + } else if FilepathExists(dockerignorePath) { + path = dockerignorePath + } else if FilepathExists(filepath.Join(buildcontext, ".dockerignore")) { path = filepath.Join(buildcontext, ".dockerignore") - } - if !FilepathExists(path) { + } else { return nil, nil } - logrus.Infof("Using dockerignore file: %v", path) + logrus.Infof("Using ignorefile: %v", path) contents, err := os.ReadFile(path) if err != nil { - return nil, errors.Wrap(err, "parsing .dockerignore") + return nil, errors.Wrap(err, "parsing ignorefile") } reader := bytes.NewBuffer(contents) return dockerignore.ReadAll(reader)