浏览代码

Turn IPC unmount errors into warnings.

And do not try to unmount empty paths.

Because nobody should be woken up in the middle of the night for them.

Signed-off-by: David Calavera <david.calavera@gmail.com>
David Calavera 9 年之前
父节点
当前提交
a54d5932e3
共有 4 个文件被更改,包括 15 次插入23 次删除
  1. 1 3
      daemon/container.go
  2. 11 15
      daemon/container_unix.go
  3. 1 2
      daemon/container_windows.go
  4. 2 3
      daemon/daemon.go

+ 1 - 3
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()
 

+ 11 - 15
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 {

+ 1 - 2
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 {

+ 2 - 3
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)
 		}