diff --git a/pkg/spegel/spegel.go b/pkg/spegel/spegel.go index fba456edfce..3b524be7b2e 100644 --- a/pkg/spegel/spegel.go +++ b/pkg/spegel/spegel.go @@ -13,6 +13,7 @@ import ( "os" "path/filepath" "regexp" + "slices" "strconv" "time" @@ -59,6 +60,8 @@ var ( resolveLatestTag = false + wildcardRegistries = []string{"_default", "*"} + // Agents request a list of peers when joining, and then again periodically afterwards. // Limit the number of concurrent peer list requests that will be served simultaneously. maxNonMutatingPeerInfoRequests = 20 // max concurrent get/list/watch requests @@ -123,6 +126,9 @@ func (c *Config) Start(ctx context.Context, nodeConfig *config.Node, criReadyCha } if _, err := url.Parse("https://" + host); err != nil || docker.IsLocalhost(host) { logrus.Errorf("Distributed registry mirror skipping invalid registry: %s", host) + } else if slices.Contains(wildcardRegistries, host) { + urls = append(urls, host) + registries = append(registries, host) } else { urls = append(urls, "https://"+host) registries = append(registries, host) diff --git a/pkg/spegel/store.go b/pkg/spegel/store.go index ee3e79f9833..c655f17aa68 100644 --- a/pkg/spegel/store.go +++ b/pkg/spegel/store.go @@ -80,10 +80,12 @@ func (ds *deferredStore) Subscribe(ctx context.Context) (<-chan oci.OCIEvent, er // Close is not part of the Store interface, but probably should be. Containerd impliments it. func (ds *deferredStore) Close() error { - store := ds.store - ds.store = nil - if closer, ok := store.(io.Closer); ok { - return closer.Close() + if ds.store != nil { + store := ds.store + ds.store = nil + if closer, ok := store.(io.Closer); ok { + return closer.Close() + } } return nil }