|  | @@ -314,25 +314,50 @@ func (s *composeService) makeSyncFn(ctx context.Context, project *types.Project,
 | 
	
		
			
				|  |  |  			case <-ctx.Done():
 | 
	
		
			
				|  |  |  				return nil
 | 
	
		
			
				|  |  |  			case opt := <-needSync:
 | 
	
		
			
				|  |  | -				if fi, statErr := os.Stat(opt.HostPath); statErr == nil && !fi.IsDir() {
 | 
	
		
			
				|  |  | -					err := s.Copy(ctx, project.Name, api.CopyOptions{
 | 
	
		
			
				|  |  | -						Source:      opt.HostPath,
 | 
	
		
			
				|  |  | -						Destination: fmt.Sprintf("%s:%s", opt.Service, opt.ContainerPath),
 | 
	
		
			
				|  |  | -					})
 | 
	
		
			
				|  |  | -					if err != nil {
 | 
	
		
			
				|  |  | -						return err
 | 
	
		
			
				|  |  | +				service, err := project.GetService(opt.Service)
 | 
	
		
			
				|  |  | +				if err != nil {
 | 
	
		
			
				|  |  | +					return err
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				scale := 1
 | 
	
		
			
				|  |  | +				if service.Deploy != nil && service.Deploy.Replicas != nil {
 | 
	
		
			
				|  |  | +					scale = int(*service.Deploy.Replicas)
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +				if fi, statErr := os.Stat(opt.HostPath); statErr == nil {
 | 
	
		
			
				|  |  | +					if fi.IsDir() {
 | 
	
		
			
				|  |  | +						for i := 1; i <= scale; i++ {
 | 
	
		
			
				|  |  | +							_, err := s.Exec(ctx, project.Name, api.RunOptions{
 | 
	
		
			
				|  |  | +								Service: opt.Service,
 | 
	
		
			
				|  |  | +								Command: []string{"mkdir", "-p", opt.ContainerPath},
 | 
	
		
			
				|  |  | +								Index:   i,
 | 
	
		
			
				|  |  | +							})
 | 
	
		
			
				|  |  | +							if err != nil {
 | 
	
		
			
				|  |  | +								logrus.Warnf("failed to create %q from %s: %v", opt.ContainerPath, opt.Service, err)
 | 
	
		
			
				|  |  | +							}
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						fmt.Fprintf(s.stdinfo(), "%s created\n", opt.ContainerPath)
 | 
	
		
			
				|  |  | +					} else {
 | 
	
		
			
				|  |  | +						err := s.Copy(ctx, project.Name, api.CopyOptions{
 | 
	
		
			
				|  |  | +							Source:      opt.HostPath,
 | 
	
		
			
				|  |  | +							Destination: fmt.Sprintf("%s:%s", opt.Service, opt.ContainerPath),
 | 
	
		
			
				|  |  | +						})
 | 
	
		
			
				|  |  | +						if err != nil {
 | 
	
		
			
				|  |  | +							return err
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  | +						fmt.Fprintf(s.stdinfo(), "%s updated\n", opt.ContainerPath)
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  | -					fmt.Fprintf(s.stdinfo(), "%s updated\n", opt.ContainerPath)
 | 
	
		
			
				|  |  |  				} else if errors.Is(statErr, fs.ErrNotExist) {
 | 
	
		
			
				|  |  | -					_, err := s.Exec(ctx, project.Name, api.RunOptions{
 | 
	
		
			
				|  |  | -						Service: opt.Service,
 | 
	
		
			
				|  |  | -						Command: []string{"rm", "-rf", opt.ContainerPath},
 | 
	
		
			
				|  |  | -						Index:   1,
 | 
	
		
			
				|  |  | -					})
 | 
	
		
			
				|  |  | -					if err != nil {
 | 
	
		
			
				|  |  | -						logrus.Warnf("failed to delete %q from %s: %v", opt.ContainerPath, opt.Service, err)
 | 
	
		
			
				|  |  | +					for i := 1; i <= scale; i++ {
 | 
	
		
			
				|  |  | +						_, err := s.Exec(ctx, project.Name, api.RunOptions{
 | 
	
		
			
				|  |  | +							Service: opt.Service,
 | 
	
		
			
				|  |  | +							Command: []string{"rm", "-rf", opt.ContainerPath},
 | 
	
		
			
				|  |  | +							Index:   i,
 | 
	
		
			
				|  |  | +						})
 | 
	
		
			
				|  |  | +						if err != nil {
 | 
	
		
			
				|  |  | +							logrus.Warnf("failed to delete %q from %s: %v", opt.ContainerPath, opt.Service, err)
 | 
	
		
			
				|  |  | +						}
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  | -					fmt.Fprintf(s.stdinfo(), "%s deleted from container\n", opt.ContainerPath)
 | 
	
		
			
				|  |  | +					fmt.Fprintf(s.stdinfo(), "%s deleted from service\n", opt.ContainerPath)
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 |