diff --git a/api/server/router/container/container.go b/api/server/router/container/container.go index 401be4a3fb..df68fcb791 100644 --- a/api/server/router/container/container.go +++ b/api/server/router/container/container.go @@ -10,13 +10,15 @@ type containerRouter struct { backend Backend decoder httputils.ContainerDecoder routes []router.Route + cgroup2 bool } // NewRouter initializes a new container router -func NewRouter(b Backend, decoder httputils.ContainerDecoder) router.Router { +func NewRouter(b Backend, decoder httputils.ContainerDecoder, cgroup2 bool) router.Router { r := &containerRouter{ backend: b, decoder: decoder, + cgroup2: cgroup2, } r.initRoutes() return r diff --git a/api/server/router/container/container_routes.go b/api/server/router/container/container_routes.go index 5001bc0509..641537dfd7 100644 --- a/api/server/router/container/container_routes.go +++ b/api/server/router/container/container_routes.go @@ -494,8 +494,8 @@ func (s *containerRouter) postContainersCreate(ctx context.Context, w http.Respo hostConfig.IpcMode = container.IpcMode("shareable") } } - if hostConfig != nil && versions.LessThan(version, "1.41") { - // Older clients expect the default to be "host" + if hostConfig != nil && versions.LessThan(version, "1.41") && !s.cgroup2 { + // Older clients expect the default to be "host" on cgroup v1 hosts if hostConfig.CgroupnsMode.IsEmpty() { hostConfig.CgroupnsMode = container.CgroupnsMode("host") } diff --git a/cmd/dockerd/daemon.go b/cmd/dockerd/daemon.go index 275d9a7262..96c31943fa 100644 --- a/cmd/dockerd/daemon.go +++ b/cmd/dockerd/daemon.go @@ -477,7 +477,7 @@ func initRouter(opts routerOptions) { routers := []router.Router{ // we need to add the checkpoint router before the container router or the DELETE gets masked checkpointrouter.NewRouter(opts.daemon, decoder), - container.NewRouter(opts.daemon, decoder), + container.NewRouter(opts.daemon, decoder, opts.daemon.RawSysInfo(true).CgroupUnified), image.NewRouter(opts.daemon.ImageService()), systemrouter.NewRouter(opts.daemon, opts.cluster, opts.buildkit, opts.features), volume.NewRouter(opts.daemon.VolumesService()),