MCPcopy
hub / github.com/docker/compose / removeDivergedVolume

Method removeDivergedVolume

pkg/compose/create.go:1645–1686  ·  pkg/compose/create.go::composeService.removeDivergedVolume
(ctx context.Context, name string, volume types.VolumeConfig, project *types.Project)

Source from the content-addressed store, hash-verified

1643}
1644
1645func (s *composeService) removeDivergedVolume(ctx context.Context, name string, volume types.VolumeConfig, project *types.Project) error {
1646 // Remove services mounting divergent volume
1647 var services []string
1648 for _, service := range project.Services.Filter(func(config types.ServiceConfig) bool {
1649 for _, cfg := range config.Volumes {
1650 if cfg.Source == name {
1651 return true
1652 }
1653 }
1654 return false
1655 }) {
1656 services = append(services, service.Name)
1657 }
1658
1659 err := s.stop(ctx, project.Name, api.StopOptions{
1660 Services: services,
1661 Project: project,
1662 }, nil)
1663 if err != nil {
1664 return err
1665 }
1666
1667 containers, err := s.getContainers(ctx, project.Name, oneOffExclude, true, services...)
1668 if err != nil {
1669 return err
1670 }
1671
1672 // FIXME (ndeloof) we have to remove container so we can recreate volume
1673 // but doing so we can't inherit anonymous volumes from previous instance
1674 err = s.remove(ctx, containers, api.RemoveOptions{
1675 Services: services,
1676 Project: project,
1677 })
1678 if err != nil {
1679 return err
1680 }
1681
1682 _, err = s.apiClient().VolumeRemove(ctx, volume.Name, client.VolumeRemoveOptions{
1683 Force: true,
1684 })
1685 return err
1686}
1687
1688func (s *composeService) createVolume(ctx context.Context, volume types.VolumeConfig) error {
1689 eventName := fmt.Sprintf("Volume %s", volume.Name)

Callers 1

ensureVolumeMethod · 0.95

Calls 5

stopMethod · 0.95
getContainersMethod · 0.95
removeMethod · 0.95
apiClientMethod · 0.95
VolumeRemoveMethod · 0.45

Tested by

no test coverage detected