github.com/ph/moby@v1.13.1/runconfig/compare.go (about) 1 package runconfig 2 3 import "github.com/docker/docker/api/types/container" 4 5 // Compare two Config struct. Do not compare the "Image" nor "Hostname" fields 6 // If OpenStdin is set, then it differs 7 func Compare(a, b *container.Config) bool { 8 if a == nil || b == nil || 9 a.OpenStdin || b.OpenStdin { 10 return false 11 } 12 if a.AttachStdout != b.AttachStdout || 13 a.AttachStderr != b.AttachStderr || 14 a.User != b.User || 15 a.OpenStdin != b.OpenStdin || 16 a.Tty != b.Tty { 17 return false 18 } 19 20 if len(a.Cmd) != len(b.Cmd) || 21 len(a.Env) != len(b.Env) || 22 len(a.Labels) != len(b.Labels) || 23 len(a.ExposedPorts) != len(b.ExposedPorts) || 24 len(a.Entrypoint) != len(b.Entrypoint) || 25 len(a.Volumes) != len(b.Volumes) { 26 return false 27 } 28 29 for i := 0; i < len(a.Cmd); i++ { 30 if a.Cmd[i] != b.Cmd[i] { 31 return false 32 } 33 } 34 for i := 0; i < len(a.Env); i++ { 35 if a.Env[i] != b.Env[i] { 36 return false 37 } 38 } 39 for k, v := range a.Labels { 40 if v != b.Labels[k] { 41 return false 42 } 43 } 44 for k := range a.ExposedPorts { 45 if _, exists := b.ExposedPorts[k]; !exists { 46 return false 47 } 48 } 49 50 for i := 0; i < len(a.Entrypoint); i++ { 51 if a.Entrypoint[i] != b.Entrypoint[i] { 52 return false 53 } 54 } 55 for key := range a.Volumes { 56 if _, exists := b.Volumes[key]; !exists { 57 return false 58 } 59 } 60 return true 61 }