|
@@ -663,8 +663,7 @@ func WithUser(userstr string) SpecOpts {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- mounts = tryReadonlyMounts(mounts)
|
|
|
- return mount.WithTempMount(ctx, mounts, f)
|
|
|
+ return mount.WithReadonlyTempMount(ctx, mounts, f)
|
|
|
default:
|
|
|
return fmt.Errorf("invalid USER value %s", userstr)
|
|
|
}
|
|
@@ -724,8 +723,7 @@ func WithUserID(uid uint32) SpecOpts {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- mounts = tryReadonlyMounts(mounts)
|
|
|
- return mount.WithTempMount(ctx, mounts, setUser)
|
|
|
+ return mount.WithReadonlyTempMount(ctx, mounts, setUser)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -769,8 +767,7 @@ func WithUsername(username string) SpecOpts {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- mounts = tryReadonlyMounts(mounts)
|
|
|
- return mount.WithTempMount(ctx, mounts, setUser)
|
|
|
+ return mount.WithReadonlyTempMount(ctx, mounts, setUser)
|
|
|
} else if s.Windows != nil {
|
|
|
s.Process.User.Username = username
|
|
|
} else {
|
|
@@ -848,8 +845,7 @@ func WithAdditionalGIDs(userstr string) SpecOpts {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- mounts = tryReadonlyMounts(mounts)
|
|
|
- return mount.WithTempMount(ctx, mounts, setAdditionalGids)
|
|
|
+ return mount.WithReadonlyTempMount(ctx, mounts, setAdditionalGids)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -910,8 +906,7 @@ func WithAppendAdditionalGroups(groups ...string) SpecOpts {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- mounts = tryReadonlyMounts(mounts)
|
|
|
- return mount.WithTempMount(ctx, mounts, setAdditionalGids)
|
|
|
+ return mount.WithReadonlyTempMount(ctx, mounts, setAdditionalGids)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1389,21 +1384,3 @@ func WithDevShmSize(kb int64) SpecOpts {
|
|
|
return ErrNoShmMount
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
-// tryReadonlyMounts is used by the options which are trying to get user/group
|
|
|
-// information from container's rootfs. Since the option does read operation
|
|
|
-// only, this helper will append ReadOnly mount option to prevent linux kernel
|
|
|
-// from syncing whole filesystem in umount syscall.
|
|
|
-//
|
|
|
-// TODO(fuweid):
|
|
|
-//
|
|
|
-// Currently, it only works for overlayfs. I think we can apply it to other
|
|
|
-// kinds of filesystem. Maybe we can return `ro` option by `snapshotter.Mount`
|
|
|
-// API, when the caller passes that experimental annotation
|
|
|
-// `containerd.io/snapshot/readonly.mount` something like that.
|
|
|
-func tryReadonlyMounts(mounts []mount.Mount) []mount.Mount {
|
|
|
- if len(mounts) == 1 && mounts[0].Type == "overlay" {
|
|
|
- mounts[0].Options = append(mounts[0].Options, "ro")
|
|
|
- }
|
|
|
- return mounts
|
|
|
-}
|