Просмотр исходного кода

pass volume option to ContainerRemove on down to also drop anonymous volumes

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 4 лет назад
Родитель
Сommit
7f22783d56
4 измененных файлов с 10 добавлено и 7 удалено
  1. 1 1
      local/compose/build.go
  2. 1 1
      local/compose/create.go
  3. 7 4
      local/compose/down.go
  4. 1 1
      local/compose/down_test.go

+ 1 - 1
local/compose/build.go

@@ -232,7 +232,7 @@ func (s *composeService) doBuild(ctx context.Context, project *types.Project, op
 	for _, c := range observedState {
 		for imageName := range opts {
 			if c.Image == imageName {
-				err = s.removeContainers(ctx, cw, []moby.Container{c}, nil)
+				err = s.removeContainers(ctx, cw, []moby.Container{c}, nil, false)
 				if err != nil {
 					return nil, err
 				}

+ 1 - 1
local/compose/create.go

@@ -92,7 +92,7 @@ func (s *composeService) create(ctx context.Context, project *types.Project, opt
 	if len(orphans) > 0 {
 		if options.RemoveOrphans {
 			w := progress.ContextWriter(ctx)
-			err := s.removeContainers(ctx, w, orphans, nil)
+			err := s.removeContainers(ctx, w, orphans, nil, false)
 			if err != nil {
 				return err
 			}

+ 7 - 4
local/compose/down.go

@@ -66,7 +66,7 @@ func (s *composeService) down(ctx context.Context, projectName string, options c
 
 	err = InReverseDependencyOrder(ctx, options.Project, func(c context.Context, service types.ServiceConfig) error {
 		serviceContainers := containers.filter(isService(service.Name))
-		err := s.removeContainers(ctx, w, serviceContainers, options.Timeout)
+		err := s.removeContainers(ctx, w, serviceContainers, options.Timeout, options.Volumes)
 		return err
 	})
 	if err != nil {
@@ -75,7 +75,7 @@ func (s *composeService) down(ctx context.Context, projectName string, options c
 
 	orphans := containers.filter(isNotService(options.Project.ServiceNames()...))
 	if options.RemoveOrphans && len(orphans) > 0 {
-		err := s.removeContainers(ctx, w, orphans, options.Timeout)
+		err := s.removeContainers(ctx, w, orphans, options.Timeout, false)
 		if err != nil {
 			return err
 		}
@@ -215,7 +215,7 @@ func (s *composeService) stopContainers(ctx context.Context, w progress.Writer,
 	return eg.Wait()
 }
 
-func (s *composeService) removeContainers(ctx context.Context, w progress.Writer, containers []moby.Container, timeout *time.Duration) error {
+func (s *composeService) removeContainers(ctx context.Context, w progress.Writer, containers []moby.Container, timeout *time.Duration, volumes bool) error {
 	eg, _ := errgroup.WithContext(ctx)
 	for _, container := range containers {
 		toDelete := container
@@ -228,7 +228,10 @@ func (s *composeService) removeContainers(ctx context.Context, w progress.Writer
 				return err
 			}
 			w.Event(progress.RemovingEvent(eventName))
-			err = s.apiClient.ContainerRemove(ctx, toDelete.ID, moby.ContainerRemoveOptions{Force: true})
+			err = s.apiClient.ContainerRemove(ctx, toDelete.ID, moby.ContainerRemoveOptions{
+				Force:         true,
+				RemoveVolumes: volumes,
+			})
 			if err != nil {
 				w.Event(progress.ErrorMessageEvent(eventName, "Error while Removing"))
 				return err

+ 1 - 1
local/compose/down_test.go

@@ -90,7 +90,7 @@ func TestDownRemoveVolumes(t *testing.T) {
 		[]apitypes.Container{testContainer("service1", "123")}, nil)
 
 	api.EXPECT().ContainerStop(gomock.Any(), "123", nil).Return(nil)
-	api.EXPECT().ContainerRemove(gomock.Any(), "123", apitypes.ContainerRemoveOptions{Force: true}).Return(nil)
+	api.EXPECT().ContainerRemove(gomock.Any(), "123", apitypes.ContainerRemoveOptions{Force: true, RemoveVolumes: true}).Return(nil)
 
 	api.EXPECT().NetworkList(gomock.Any(), apitypes.NetworkListOptions{Filters: filters.NewArgs(projectFilter(testProject))}).Return(nil, nil)