|  | @@ -271,7 +271,7 @@ func (s *composeService) pullRequiredImages(ctx context.Context, project *types.
 | 
	
		
			
				|  |  |  			eg.Go(func() error {
 | 
	
		
			
				|  |  |  				id, err := s.pullServiceImage(ctx, service, info, s.configFile(), w, quietPull)
 | 
	
		
			
				|  |  |  				pulledImages[i] = id
 | 
	
		
			
				|  |  | -				if err != nil && service.Build != nil {
 | 
	
		
			
				|  |  | +				if err != nil && isServiceImageToBuild(service, project.Services) {
 | 
	
		
			
				|  |  |  					// image can be built, so we can ignore pull failure
 | 
	
		
			
				|  |  |  					return nil
 | 
	
		
			
				|  |  |  				}
 | 
	
	
		
			
				|  | @@ -291,6 +291,19 @@ func (s *composeService) pullRequiredImages(ctx context.Context, project *types.
 | 
	
		
			
				|  |  |  	})
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +func isServiceImageToBuild(service types.ServiceConfig, services []types.ServiceConfig) bool {
 | 
	
		
			
				|  |  | +	if service.Build != nil {
 | 
	
		
			
				|  |  | +		return true
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for _, depService := range services {
 | 
	
		
			
				|  |  | +		if depService.Image == service.Image && depService.Build != nil {
 | 
	
		
			
				|  |  | +			return true
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return false
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  func toPullProgressEvent(parent string, jm jsonmessage.JSONMessage, w progress.Writer) {
 | 
	
		
			
				|  |  |  	if jm.ID == "" || jm.Progress == nil {
 | 
	
		
			
				|  |  |  		return
 |