mirror of
https://github.com/genuinetools/reg.git
synced 2024-08-20 13:50:23 -04:00
57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
![]() |
// +build !windows
|
||
|
|
||
|
package daemon
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"os/exec"
|
||
|
"path/filepath"
|
||
|
|
||
|
"github.com/containerd/containerd/linux/runctypes"
|
||
|
"github.com/docker/docker/container"
|
||
|
"github.com/pkg/errors"
|
||
|
)
|
||
|
|
||
|
func (daemon *Daemon) getRuntimeScript(container *container.Container) (string, error) {
|
||
|
name := container.HostConfig.Runtime
|
||
|
rt := daemon.configStore.GetRuntime(name)
|
||
|
if rt == nil {
|
||
|
return "", validationError{errors.Errorf("no such runtime '%s'", name)}
|
||
|
}
|
||
|
|
||
|
if len(rt.Args) > 0 {
|
||
|
// First check that the target exist, as using it in a script won't
|
||
|
// give us the right error
|
||
|
if _, err := exec.LookPath(rt.Path); err != nil {
|
||
|
return "", translateContainerdStartErr(container.Path, container.SetExitCode, err)
|
||
|
}
|
||
|
return filepath.Join(daemon.configStore.Root, "runtimes", name), nil
|
||
|
}
|
||
|
return rt.Path, nil
|
||
|
}
|
||
|
|
||
|
// getLibcontainerdCreateOptions callers must hold a lock on the container
|
||
|
func (daemon *Daemon) getLibcontainerdCreateOptions(container *container.Container) (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)
|
||
|
}
|
||
|
|
||
|
path, err := daemon.getRuntimeScript(container)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
opts := &runctypes.RuncOptions{
|
||
|
Runtime: path,
|
||
|
RuntimeRoot: filepath.Join(daemon.configStore.ExecRoot,
|
||
|
fmt.Sprintf("runtime-%s", container.HostConfig.Runtime)),
|
||
|
}
|
||
|
|
||
|
if UsingSystemd(daemon.configStore) {
|
||
|
opts.SystemdCgroup = true
|
||
|
}
|
||
|
|
||
|
return opts, nil
|
||
|
}
|