registry: Do not push to mirrors
This patch splits LookupEndpoints into LookupPullEndpoints and LookupPushEndpoints so that mirrors added with --registry-mirror are skipped in the list returned by LookupPushEndpoints. Fixes https://github.com/docker/distribution/issues/823 Signed-off-by: Tibor Vass <tibor@docker.com>master
							parent
							
								
									86a3ea91b8
								
							
						
					
					
						commit
						a7eb16ad1c
					
				| 
						 | 
				
			
			@ -109,27 +109,40 @@ func (s *Service) tlsConfigForMirror(mirror string) (*tls.Config, error) {
 | 
			
		|||
	return s.TLSConfig(mirrorURL.Host)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LookupEndpoints creates an list of endpoints to try, in order of preference.
 | 
			
		||||
// LookupPullEndpoints creates an list of endpoints to try to pull from, in order of preference.
 | 
			
		||||
// It gives preference to v2 endpoints over v1, mirrors over the actual
 | 
			
		||||
// registry, and HTTPS over plain HTTP.
 | 
			
		||||
func (s *Service) LookupEndpoints(repoName string) (endpoints []APIEndpoint, err error) {
 | 
			
		||||
func (s *Service) LookupPullEndpoints(repoName string) (endpoints []APIEndpoint, err error) {
 | 
			
		||||
	return s.lookupEndpoints(repoName, false)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// LookupPushEndpoints creates an list of endpoints to try to push to, in order of preference.
 | 
			
		||||
// It gives preference to v2 endpoints over v1, and HTTPS over plain HTTP.
 | 
			
		||||
// Mirrors are not included.
 | 
			
		||||
func (s *Service) LookupPushEndpoints(repoName string) (endpoints []APIEndpoint, err error) {
 | 
			
		||||
	return s.lookupEndpoints(repoName, true)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *Service) lookupEndpoints(repoName string, isPush bool) (endpoints []APIEndpoint, err error) {
 | 
			
		||||
	var cfg = tlsconfig.ServerDefault
 | 
			
		||||
	tlsConfig := &cfg
 | 
			
		||||
	if strings.HasPrefix(repoName, DefaultNamespace+"/") {
 | 
			
		||||
		// v2 mirrors
 | 
			
		||||
		for _, mirror := range s.Config.Mirrors {
 | 
			
		||||
			mirrorTLSConfig, err := s.tlsConfigForMirror(mirror)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return nil, err
 | 
			
		||||
		if !isPush {
 | 
			
		||||
			// v2 mirrors for pull only
 | 
			
		||||
			for _, mirror := range s.Config.Mirrors {
 | 
			
		||||
				mirrorTLSConfig, err := s.tlsConfigForMirror(mirror)
 | 
			
		||||
				if err != nil {
 | 
			
		||||
					return nil, err
 | 
			
		||||
				}
 | 
			
		||||
				endpoints = append(endpoints, APIEndpoint{
 | 
			
		||||
					URL: mirror,
 | 
			
		||||
					// guess mirrors are v2
 | 
			
		||||
					Version:      APIVersion2,
 | 
			
		||||
					Mirror:       true,
 | 
			
		||||
					TrimHostname: true,
 | 
			
		||||
					TLSConfig:    mirrorTLSConfig,
 | 
			
		||||
				})
 | 
			
		||||
			}
 | 
			
		||||
			endpoints = append(endpoints, APIEndpoint{
 | 
			
		||||
				URL: mirror,
 | 
			
		||||
				// guess mirrors are v2
 | 
			
		||||
				Version:      APIVersion2,
 | 
			
		||||
				Mirror:       true,
 | 
			
		||||
				TrimHostname: true,
 | 
			
		||||
				TLSConfig:    mirrorTLSConfig,
 | 
			
		||||
			})
 | 
			
		||||
		}
 | 
			
		||||
		// v2 registry
 | 
			
		||||
		endpoints = append(endpoints, APIEndpoint{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue