diff options
author | Daniel J Walsh <dwalsh@redhat.com> | 2018-09-19 09:54:15 -0400 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-09-21 09:45:14 +0000 |
commit | fbd1392a46558eb4adb368ba37fdce2b45013c1f (patch) | |
tree | 10b7ddb51d19611462421ef22570561f6d4f70c4 /libpod | |
parent | 6191ffb6c563b3739e17c5b953eb68fb47b8a2bc (diff) | |
download | podman-fbd1392a46558eb4adb368ba37fdce2b45013c1f.tar.gz podman-fbd1392a46558eb4adb368ba37fdce2b45013c1f.tar.bz2 podman-fbd1392a46558eb4adb368ba37fdce2b45013c1f.zip |
Don't output inodes created to run a container
There is a group of inodes that get created when running a container
if they do not exist.
containerMounts = map[string]bool{
"/dev": true,
"/etc/hostname": true,
"/etc/hosts": true,
"/etc/resolv.conf": true,
"/proc": true,
"/run": true,
"/run/.containerenv": true,
"/run/secrets": true,
"/sys": true,
}
If the destination inode does not exist, libpod/runc will create the inode.
This can cause programs like podman diff to see the image as having changed,
when actually it has not. This patch ignores changes in these inodes.
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
Closes: #1508
Approved by: giuseppe
Diffstat (limited to 'libpod')
-rw-r--r-- | libpod/diff.go | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/libpod/diff.go b/libpod/diff.go index e86a186ed..f348e6b81 100644 --- a/libpod/diff.go +++ b/libpod/diff.go @@ -6,6 +6,18 @@ import ( "github.com/pkg/errors" ) +var containerMounts = map[string]bool{ + "/dev": true, + "/etc/hostname": true, + "/etc/hosts": true, + "/etc/resolv.conf": true, + "/proc": true, + "/run": true, + "/run/.containerenv": true, + "/run/secrets": true, + "/sys": true, +} + // GetDiff returns the differences between the two images, layers, or containers func (r *Runtime) GetDiff(from, to string) ([]archive.Change, error) { toLayer, err := r.getLayerID(to) @@ -19,7 +31,17 @@ func (r *Runtime) GetDiff(from, to string) ([]archive.Change, error) { return nil, err } } - return r.store.Changes(fromLayer, toLayer) + var rchanges []archive.Change + changes, err := r.store.Changes(fromLayer, toLayer) + if err == nil { + for _, c := range changes { + if containerMounts[c.Path] { + continue + } + rchanges = append(rchanges, c) + } + } + return rchanges, err } // GetLayerID gets a full layer id given a full or partial id |