github.com/Heebron/moby@v0.0.0-20221111184709-6eab4f55faf7/daemon/containerd/resolver.go (about)

     1  package containerd
     2  
     3  import (
     4  	"github.com/containerd/containerd/remotes"
     5  	"github.com/containerd/containerd/remotes/docker"
     6  	registrytypes "github.com/docker/docker/api/types/registry"
     7  	"github.com/docker/docker/registry"
     8  	"github.com/sirupsen/logrus"
     9  )
    10  
    11  func newResolverFromAuthConfig(authConfig *registrytypes.AuthConfig) remotes.Resolver {
    12  	opts := []docker.RegistryOpt{}
    13  	if authConfig != nil {
    14  		cfgHost := registry.ConvertToHostname(authConfig.ServerAddress)
    15  		if cfgHost == registry.IndexHostname {
    16  			cfgHost = registry.DefaultRegistryHost
    17  		}
    18  		authorizer := docker.NewDockerAuthorizer(docker.WithAuthCreds(func(host string) (string, string, error) {
    19  			if cfgHost != host {
    20  				logrus.WithField("host", host).WithField("cfgHost", cfgHost).Warn("Host doesn't match")
    21  				return "", "", nil
    22  			}
    23  			if authConfig.IdentityToken != "" {
    24  				return "", authConfig.IdentityToken, nil
    25  			}
    26  			return authConfig.Username, authConfig.Password, nil
    27  		}))
    28  
    29  		opts = append(opts, docker.WithAuthorizer(authorizer))
    30  	}
    31  
    32  	return docker.NewResolver(docker.ResolverOptions{
    33  		Hosts: docker.ConfigureDefaultRegistries(opts...),
    34  	})
    35  }