diff --git a/builder/dockerfile/internals.go b/builder/dockerfile/internals.go index a82ad7b3d7..ff98eeb479 100644 --- a/builder/dockerfile/internals.go +++ b/builder/dockerfile/internals.go @@ -298,7 +298,7 @@ func (b *Builder) download(srcURL string) (fi builder.FileInfo, err error) { } } - if err = system.Chtimes(tmpFileName, time.Time{}, mTime); err != nil { + if err = system.Chtimes(tmpFileName, mTime, mTime); err != nil { return } diff --git a/pkg/archive/archive.go b/pkg/archive/archive.go index e7c82e102b..1c8e1153b3 100644 --- a/pkg/archive/archive.go +++ b/pkg/archive/archive.go @@ -407,19 +407,25 @@ func createTarFile(path, extractDir string, hdr *tar.Header, reader io.Reader, L return err } + aTime := hdr.AccessTime + if aTime.Before(hdr.ModTime) { + // Last access time should never be before last modified time. + aTime = hdr.ModTime + } + // system.Chtimes doesn't support a NOFOLLOW flag atm if hdr.Typeflag == tar.TypeLink { if fi, err := os.Lstat(hdr.Linkname); err == nil && (fi.Mode()&os.ModeSymlink == 0) { - if err := system.Chtimes(path, hdr.AccessTime, hdr.ModTime); err != nil { + if err := system.Chtimes(path, aTime, hdr.ModTime); err != nil { return err } } } else if hdr.Typeflag != tar.TypeSymlink { - if err := system.Chtimes(path, hdr.AccessTime, hdr.ModTime); err != nil { + if err := system.Chtimes(path, aTime, hdr.ModTime); err != nil { return err } } else { - ts := []syscall.Timespec{timeToTimespec(hdr.AccessTime), timeToTimespec(hdr.ModTime)} + ts := []syscall.Timespec{timeToTimespec(aTime), timeToTimespec(hdr.ModTime)} if err := system.LUtimesNano(path, ts); err != nil && err != system.ErrNotSupportedPlatform { return err }