| // +build !windows |
| |
| package daemon // import "github.com/docker/docker/daemon" |
| |
| import ( |
| "github.com/containerd/cgroups" |
| "github.com/docker/docker/container" |
| "github.com/docker/docker/errdefs" |
| "github.com/pkg/errors" |
| "github.com/sirupsen/logrus" |
| ) |
| |
| // getLibcontainerdCreateOptions callers must hold a lock on the container |
| func (daemon *Daemon) getLibcontainerdCreateOptions(container *container.Container) (string, interface{}, error) { |
| // Ensure a runtime has been assigned to this container |
| if container.HostConfig.Runtime == "" { |
| container.HostConfig.Runtime = daemon.configStore.GetDefaultRuntimeName() |
| container.CheckpointTo(daemon.containersReplica) |
| } |
| |
| rt := daemon.configStore.GetRuntime(container.HostConfig.Runtime) |
| if rt.Shim == nil { |
| p, err := daemon.rewriteRuntimePath(container.HostConfig.Runtime, rt.Path, rt.Args) |
| if err != nil { |
| return "", nil, translateContainerdStartErr(container.Path, container.SetExitCode, err) |
| } |
| rt.Shim = defaultV2ShimConfig(daemon.configStore, p) |
| } |
| if rt.Shim.Binary == linuxShimV1 { |
| if cgroups.Mode() == cgroups.Unified { |
| return "", nil, errdefs.InvalidParameter(errors.Errorf("runtime %q is not supported while cgroups v2 (unified hierarchy) is being used", container.HostConfig.Runtime)) |
| } |
| logrus.Warnf("Configured runtime %q is deprecated and will be removed in the next release", container.HostConfig.Runtime) |
| } |
| |
| return rt.Shim.Binary, rt.Shim.Opts, nil |
| } |