mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-02-18 00:17:39 +01:00
Fixed an issue where all Docker containers were showing 'click to update' even when they were up to date. The root cause was comparing the wrong digest types: - Previously: Compared ImageID (local config hash) vs registry manifest digest - Now: Uses RepoDigests from image inspect, which is the actual manifest digest that Docker received from the registry when pulling the image For multi-arch images, the registry returns a manifest list digest, while Docker stores the platform-specific image config digest locally. These will never match, causing false positives for all multi-arch images. Changes: - Added ImageInspectWithRaw to dockerClient interface - Added getImageRepoDigest method to extract RepoDigest from image - Added matchesImageReference helper for Docker Hub naming conventions - Added tests for matchesImageReference Fixes #955
34 lines
2.0 KiB
Go
34 lines
2.0 KiB
Go
package dockeragent
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
|
|
containertypes "github.com/docker/docker/api/types/container"
|
|
"github.com/docker/docker/api/types/image"
|
|
"github.com/docker/docker/api/types/network"
|
|
swarmtypes "github.com/docker/docker/api/types/swarm"
|
|
systemtypes "github.com/docker/docker/api/types/system"
|
|
"github.com/opencontainers/image-spec/specs-go/v1"
|
|
)
|
|
|
|
type dockerClient interface {
|
|
Info(ctx context.Context) (systemtypes.Info, error)
|
|
DaemonHost() string
|
|
ContainerList(ctx context.Context, options containertypes.ListOptions) ([]containertypes.Summary, error)
|
|
ContainerInspectWithRaw(ctx context.Context, containerID string, size bool) (containertypes.InspectResponse, []byte, error)
|
|
ContainerStatsOneShot(ctx context.Context, containerID string) (containertypes.StatsResponseReader, error)
|
|
ContainerInspect(ctx context.Context, containerID string) (containertypes.InspectResponse, error)
|
|
ImagePull(ctx context.Context, ref string, options image.PullOptions) (io.ReadCloser, error)
|
|
ContainerStop(ctx context.Context, containerID string, options containertypes.StopOptions) error
|
|
ContainerRename(ctx context.Context, containerID, newName string) error
|
|
ContainerCreate(ctx context.Context, config *containertypes.Config, hostConfig *containertypes.HostConfig, networkingConfig *network.NetworkingConfig, platform *v1.Platform, containerName string) (containertypes.CreateResponse, error)
|
|
NetworkConnect(ctx context.Context, networkID, containerID string, config *network.EndpointSettings) error
|
|
ContainerStart(ctx context.Context, containerID string, options containertypes.StartOptions) error
|
|
ContainerRemove(ctx context.Context, containerID string, options containertypes.RemoveOptions) error
|
|
ServiceList(ctx context.Context, options swarmtypes.ServiceListOptions) ([]swarmtypes.Service, error)
|
|
TaskList(ctx context.Context, options swarmtypes.TaskListOptions) ([]swarmtypes.Task, error)
|
|
ImageInspectWithRaw(ctx context.Context, imageID string) (image.InspectResponse, []byte, error)
|
|
Close() error
|
|
}
|