Преглед на файлове

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)
 		}