diff --git a/daemon/container.go b/daemon/container.go index 170726fd1e..777c15ce31 100644 --- a/daemon/container.go +++ b/daemon/container.go @@ -341,9 +341,7 @@ func (streamConfig *streamConfig) StderrPipe() io.ReadCloser { func (container *Container) cleanup() { container.releaseNetwork() - if err := container.unmountIpcMounts(detachMounted); err != nil { - logrus.Errorf("%s: Failed to umount ipc filesystems: %v", container.ID, err) - } + container.unmountIpcMounts(detachMounted) container.conditionalUnmountOnCleanup() diff --git a/daemon/container_unix.go b/daemon/container_unix.go index 4c13f7d036..e0d7206487 100644 --- a/daemon/container_unix.go +++ b/daemon/container_unix.go @@ -1361,22 +1361,21 @@ func (container *Container) setupIpcDirs() error { return nil } -func (container *Container) unmountIpcMounts(unmount func(pth string) error) error { +func (container *Container) unmountIpcMounts(unmount func(pth string) error) { if container.hostConfig.IpcMode.IsContainer() || container.hostConfig.IpcMode.IsHost() { - return nil + return } - var errors []string + var warnings []string if !container.hasMountFor("/dev/shm") { shmPath, err := container.shmPath() if err != nil { logrus.Error(err) - errors = append(errors, err.Error()) - } else { + warnings = append(warnings, err.Error()) + } else if shmPath != "" { if err := unmount(shmPath); err != nil { - logrus.Errorf("failed to umount %s: %v", shmPath, err) - errors = append(errors, err.Error()) + warnings = append(warnings, fmt.Sprintf("failed to umount %s: %v", shmPath, err)) } } @@ -1386,20 +1385,17 @@ func (container *Container) unmountIpcMounts(unmount func(pth string) error) err mqueuePath, err := container.mqueuePath() if err != nil { logrus.Error(err) - errors = append(errors, err.Error()) - } else { + warnings = append(warnings, err.Error()) + } else if mqueuePath != "" { if err := unmount(mqueuePath); err != nil { - logrus.Errorf("failed to umount %s: %v", mqueuePath, err) - errors = append(errors, err.Error()) + warnings = append(warnings, fmt.Sprintf("failed to umount %s: %v", mqueuePath, err)) } } } - if len(errors) > 0 { - return fmt.Errorf("failed to cleanup ipc mounts:\n%v", strings.Join(errors, "\n")) + if len(warnings) > 0 { + logrus.Warnf("failed to cleanup ipc mounts:\n%v", strings.Join(warnings, "\n")) } - - return nil } func (container *Container) ipcMounts() []execdriver.Mount { diff --git a/daemon/container_windows.go b/daemon/container_windows.go index b71b4f59a4..ff7c1721f2 100644 --- a/daemon/container_windows.go +++ b/daemon/container_windows.go @@ -177,8 +177,7 @@ func (container *Container) setupIpcDirs() error { return nil } -func (container *Container) unmountIpcMounts(unmount func(pth string) error) error { - return nil +func (container *Container) unmountIpcMounts(unmount func(pth string) error) { } func detachMounted(path string) error { diff --git a/daemon/daemon.go b/daemon/daemon.go index f2d9977e74..09cd31a238 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -226,9 +226,8 @@ func (daemon *Daemon) Register(container *Container) error { } daemon.execDriver.Terminate(cmd) - if err := container.unmountIpcMounts(mount.Unmount); err != nil { - logrus.Errorf("%s: Failed to umount ipc filesystems: %v", container.ID, err) - } + container.unmountIpcMounts(mount.Unmount) + if err := container.Unmount(); err != nil { logrus.Debugf("unmount error %s", err) }