|
@@ -110,6 +110,15 @@ func withRootless(daemon *Daemon, daemonCfg *dconfig.Config) coci.SpecOpts {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// withRootfulInRootless is used for "rootful-in-rootless" dind;
|
|
|
|
+// the daemon is running in UserNS but has no access to RootlessKit API socket, host filesystem, etc.
|
|
|
|
+func withRootfulInRootless(daemon *Daemon, daemonCfg *dconfig.Config) coci.SpecOpts {
|
|
|
|
+ return func(_ context.Context, _ coci.Client, _ *containers.Container, s *coci.Spec) error {
|
|
|
|
+ specconv.ToRootfulInRootless(s)
|
|
|
|
+ return nil
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
// WithOOMScore sets the oom score
|
|
// WithOOMScore sets the oom score
|
|
func WithOOMScore(score *int) coci.SpecOpts {
|
|
func WithOOMScore(score *int) coci.SpecOpts {
|
|
return func(ctx context.Context, _ coci.Client, _ *containers.Container, s *coci.Spec) error {
|
|
return func(ctx context.Context, _ coci.Client, _ *containers.Container, s *coci.Spec) error {
|
|
@@ -1126,6 +1135,8 @@ func (daemon *Daemon) createSpec(ctx context.Context, daemonCfg *configStore, c
|
|
}
|
|
}
|
|
if daemonCfg.Rootless {
|
|
if daemonCfg.Rootless {
|
|
opts = append(opts, withRootless(daemon, &daemonCfg.Config))
|
|
opts = append(opts, withRootless(daemon, &daemonCfg.Config))
|
|
|
|
+ } else if userns.RunningInUserNS() {
|
|
|
|
+ opts = append(opts, withRootfulInRootless(daemon, &daemonCfg.Config))
|
|
}
|
|
}
|
|
|
|
|
|
var snapshotter, snapshotKey string
|
|
var snapshotter, snapshotKey string
|