diff --git a/pkg/container/client.go b/pkg/container/client.go index 14ca237..83f025b 100644 --- a/pkg/container/client.go +++ b/pkg/container/client.go @@ -311,6 +311,10 @@ func (client dockerClient) RenameContainer(c t.Container, newName string) error func (client dockerClient) IsContainerStale(container t.Container) (stale bool, latestImage t.ImageID, err error) { ctx := context.Background() + if isLocalImage, checkErr := container.LocalImage(); checkErr && isLocalImage { + return client.HasNewImage(ctx, container) + } + if !client.PullImages || container.IsNoPull() { log.Debugf("Skipping image pull.") } else if err := client.PullImage(ctx, container); err != nil { diff --git a/pkg/container/container.go b/pkg/container/container.go index 0f78f62..45b3eb5 100644 --- a/pkg/container/container.go +++ b/pkg/container/container.go @@ -113,6 +113,22 @@ func (c Container) ImageName() string { return imageName } +// Local returns the value of the container local label and if the label +// was set. +func (c Container) LocalImage() (bool, bool) { + rawBool, ok := c.getLabelValue(enableLocal) + if !ok { + return false, false + } + + parsedBool, err := strconv.ParseBool(rawBool) + if err != nil { + return false, false + } + + return parsedBool, true +} + // Enabled returns the value of the container enabled label and if the label // was set. func (c Container) Enabled() (bool, bool) { diff --git a/pkg/container/metadata.go b/pkg/container/metadata.go index 74a04cb..f43acf4 100644 --- a/pkg/container/metadata.go +++ b/pkg/container/metadata.go @@ -4,6 +4,7 @@ const ( watchtowerLabel = "com.centurylinklabs.watchtower" signalLabel = "com.centurylinklabs.watchtower.stop-signal" enableLabel = "com.centurylinklabs.watchtower.enable" + enableLocal = "com.centurylinklabs.watchtower.local-image" monitorOnlyLabel = "com.centurylinklabs.watchtower.monitor-only" noPullLabel = "com.centurylinklabs.watchtower.no-pull" dependsOnLabel = "com.centurylinklabs.watchtower.depends-on" diff --git a/pkg/types/container.go b/pkg/types/container.go index 752fd11..c6f4535 100644 --- a/pkg/types/container.go +++ b/pkg/types/container.go @@ -75,4 +75,5 @@ type Container interface { IsRestarting() bool GetCreateConfig() *dc.Config GetCreateHostConfig() *dc.HostConfig + LocalImage() (bool, bool) }