func (container *Container) Unmount() error { var ( err error root = container.RootfsPath() mounts = []string{ path.Join(root, "/.dockerinit"), path.Join(root, "/.dockerenv"), path.Join(root, "/etc/resolv.conf"), } ) if container.HostnamePath != "" && container.HostsPath != "" { mounts = append(mounts, path.Join(root, "/etc/hostname"), path.Join(root, "/etc/hosts")) } for r := range container.Volumes { mounts = append(mounts, path.Join(root, r)) } for _, m := range mounts { if lastError := mount.Unmount(m); lastError != nil { err = lastError } } if err != nil { return err } return container.runtime.Unmount(container) }
func (daemon *Daemon) Close() error { errorsStrings := []string{} if err := daemon.shutdown(); err != nil { utils.Errorf("daemon.shutdown(): %s", err) errorsStrings = append(errorsStrings, err.Error()) } if err := portallocator.ReleaseAll(); err != nil { utils.Errorf("portallocator.ReleaseAll(): %s", err) errorsStrings = append(errorsStrings, err.Error()) } if err := daemon.driver.Cleanup(); err != nil { utils.Errorf("daemon.driver.Cleanup(): %s", err.Error()) errorsStrings = append(errorsStrings, err.Error()) } if err := daemon.containerGraph.Close(); err != nil { utils.Errorf("daemon.containerGraph.Close(): %s", err.Error()) errorsStrings = append(errorsStrings, err.Error()) } if err := mount.Unmount(daemon.config.Root); err != nil { utils.Errorf("daemon.Umount(%s): %s", daemon.config.Root, err.Error()) errorsStrings = append(errorsStrings, err.Error()) } if len(errorsStrings) > 0 { return fmt.Errorf("%s", strings.Join(errorsStrings, ", ")) } return nil }
func (container *Container) Unmount() error { var ( err error root = container.RootfsPath() mounts = []string{ path.Join(root, "/.dockerinit"), path.Join(root, "/.dockerenv"), path.Join(root, "/etc/resolv.conf"), } ) if container.HostnamePath != "" && container.HostsPath != "" { mounts = append(mounts, path.Join(root, "/etc/hostname"), path.Join(root, "/etc/hosts")) } for r := range container.Volumes { mounts = append(mounts, path.Join(root, r)) } for i := len(mounts) - 1; i >= 0; i-- { if lastError := mount.Unmount(mounts[i]); lastError != nil { err = fmt.Errorf("Failed to umount %v: %v", mounts[i], lastError) } } if err != nil { return err } return container.runtime.Unmount(container) }
func unmountVolumesForContainer(container *Container) { var ( root = container.RootfsPath() mounts = []string{ root, filepath.Join(root, "/.dockerinit"), filepath.Join(root, "/.dockerenv"), filepath.Join(root, "/etc/resolv.conf"), } ) if container.HostnamePath != "" && container.HostsPath != "" { mounts = append(mounts, filepath.Join(root, "/etc/hostname"), filepath.Join(root, "/etc/hosts")) } for r := range container.Volumes { mounts = append(mounts, filepath.Join(root, r)) } for i := len(mounts) - 1; i >= 0; i-- { if lastError := mount.Unmount(mounts[i]); lastError != nil { log.Printf("Failed to umount %v: %v", mounts[i], lastError) } } }
func (d *Driver) Cleanup() error { err := d.DeviceSet.Shutdown() if err2 := mount.Unmount(d.home); err == nil { err = err2 } return err }
func (container *Container) cleanup() { container.releaseNetwork() // Disable all active links if container.activeLinks != nil { for _, link := range container.activeLinks { link.Disable() } } if container.Config.OpenStdin { if err := container.stdin.Close(); err != nil { utils.Errorf("%s: Error close stdin: %s", container.ID, err) } } if err := container.stdout.CloseWriters(); err != nil { utils.Errorf("%s: Error close stdout: %s", container.ID, err) } if err := container.stderr.CloseWriters(); err != nil { utils.Errorf("%s: Error close stderr: %s", container.ID, err) } if container.ptyMaster != nil { if err := container.ptyMaster.Close(); err != nil { utils.Errorf("%s: Error closing Pty master: %s", container.ID, err) } } var ( root = container.RootfsPath() mounts = []string{ root, path.Join(root, "/.dockerinit"), path.Join(root, "/.dockerenv"), path.Join(root, "/etc/resolv.conf"), } ) if container.HostnamePath != "" && container.HostsPath != "" { mounts = append(mounts, path.Join(root, "/etc/hostname"), path.Join(root, "/etc/hosts")) } for r := range container.Volumes { mounts = append(mounts, path.Join(root, r)) } for i := len(mounts) - 1; i >= 0; i-- { if lastError := mount.Unmount(mounts[i]); lastError != nil { log.Printf("Failed to umount %v: %v", mounts[i], lastError) } } if err := container.Unmount(); err != nil { log.Printf("%v: Failed to umount filesystem: %v", container.ID, err) } }
// During cleanup aufs needs to unmount all mountpoints func (a *Driver) Cleanup() error { ids, err := loadIds(path.Join(a.rootPath(), "layers")) if err != nil { return err } for _, id := range ids { if err := a.unmount(id); err != nil { utils.Errorf("Unmounting %s: %s", utils.TruncateID(id), err) } } return mountpk.Unmount(a.root) }
func (d *Driver) Cleanup() error { return mount.Unmount(d.home) }