start_unix.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. // +build !windows
  2. package daemon // import "github.com/docker/docker/daemon"
  3. import (
  4. "github.com/docker/docker/container"
  5. "github.com/docker/docker/errdefs"
  6. "github.com/opencontainers/runc/libcontainer/cgroups"
  7. "github.com/pkg/errors"
  8. "github.com/sirupsen/logrus"
  9. )
  10. // getLibcontainerdCreateOptions callers must hold a lock on the container
  11. func (daemon *Daemon) getLibcontainerdCreateOptions(container *container.Container) (string, interface{}, error) {
  12. // Ensure a runtime has been assigned to this container
  13. if container.HostConfig.Runtime == "" {
  14. container.HostConfig.Runtime = daemon.configStore.GetDefaultRuntimeName()
  15. container.CheckpointTo(daemon.containersReplica)
  16. }
  17. rt := daemon.configStore.GetRuntime(container.HostConfig.Runtime)
  18. if rt.Shim == nil {
  19. p, err := daemon.rewriteRuntimePath(container.HostConfig.Runtime, rt.Path, rt.Args)
  20. if err != nil {
  21. return "", nil, translateContainerdStartErr(container.Path, container.SetExitCode, err)
  22. }
  23. rt.Shim = getShimConfig(daemon.configStore, p)
  24. }
  25. if rt.Shim.Binary == linuxShimV1 {
  26. if cgroups.IsCgroup2UnifiedMode() {
  27. return "", nil, errdefs.InvalidParameter(errors.Errorf("runtime %q is not supported while cgroups v2 (unified hierarchy) is being used", container.HostConfig.Runtime))
  28. }
  29. logrus.Warnf("Configured runtime %q is deprecated and will be removed in the next release", container.HostConfig.Runtime)
  30. }
  31. return rt.Shim.Binary, rt.Shim.Opts, nil
  32. }