123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- package oci // import "github.com/docker/docker/oci"
- import (
- "runtime"
- "github.com/docker/docker/oci/caps"
- specs "github.com/opencontainers/runtime-spec/specs-go"
- )
- func iPtr(i int64) *int64 { return &i }
- const defaultUnixPathEnv = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
- // DefaultPathEnv is unix style list of directories to search for
- // executables. Each directory is separated from the next by a colon
- // ':' character .
- // For Windows containers, an empty string is returned as the default
- // path will be set by the container, and Docker has no context of what the
- // default path should be.
- //
- // TODO(thaJeztah) align Windows default with BuildKit; see https://github.com/moby/buildkit/pull/1747
- // TODO(thaJeztah) use defaults from containerd (but align it with BuildKit; see https://github.com/moby/buildkit/pull/1747)
- func DefaultPathEnv(os string) string {
- if os == "windows" {
- return ""
- }
- return defaultUnixPathEnv
- }
- // DefaultSpec returns the default spec used by docker for the current Platform
- func DefaultSpec() specs.Spec {
- if runtime.GOOS == "windows" {
- return DefaultWindowsSpec()
- }
- return DefaultLinuxSpec()
- }
- // DefaultWindowsSpec create a default spec for running Windows containers
- func DefaultWindowsSpec() specs.Spec {
- return specs.Spec{
- Version: specs.Version,
- Windows: &specs.Windows{},
- Process: &specs.Process{},
- Root: &specs.Root{},
- }
- }
- // DefaultLinuxSpec create a default spec for running Linux containers
- func DefaultLinuxSpec() specs.Spec {
- return specs.Spec{
- Version: specs.Version,
- Process: &specs.Process{
- Capabilities: &specs.LinuxCapabilities{
- Bounding: caps.DefaultCapabilities(),
- Permitted: caps.DefaultCapabilities(),
- Effective: caps.DefaultCapabilities(),
- },
- },
- Root: &specs.Root{},
- Mounts: []specs.Mount{
- {
- Destination: "/proc",
- Type: "proc",
- Source: "proc",
- Options: []string{"nosuid", "noexec", "nodev"},
- },
- {
- Destination: "/dev",
- Type: "tmpfs",
- Source: "tmpfs",
- Options: []string{"nosuid", "strictatime", "mode=755", "size=65536k"},
- },
- {
- Destination: "/dev/pts",
- Type: "devpts",
- Source: "devpts",
- Options: []string{"nosuid", "noexec", "newinstance", "ptmxmode=0666", "mode=0620", "gid=5"},
- },
- {
- Destination: "/sys",
- Type: "sysfs",
- Source: "sysfs",
- Options: []string{"nosuid", "noexec", "nodev", "ro"},
- },
- {
- Destination: "/sys/fs/cgroup",
- Type: "cgroup",
- Source: "cgroup",
- Options: []string{"ro", "nosuid", "noexec", "nodev"},
- },
- {
- Destination: "/dev/mqueue",
- Type: "mqueue",
- Source: "mqueue",
- Options: []string{"nosuid", "noexec", "nodev"},
- },
- {
- Destination: "/dev/shm",
- Type: "tmpfs",
- Source: "shm",
- Options: []string{"nosuid", "noexec", "nodev", "mode=1777"},
- },
- },
- Linux: &specs.Linux{
- MaskedPaths: []string{
- "/proc/asound",
- "/proc/acpi",
- "/proc/kcore",
- "/proc/keys",
- "/proc/latency_stats",
- "/proc/timer_list",
- "/proc/timer_stats",
- "/proc/sched_debug",
- "/proc/scsi",
- "/sys/firmware",
- "/sys/devices/virtual/powercap",
- },
- ReadonlyPaths: []string{
- "/proc/bus",
- "/proc/fs",
- "/proc/irq",
- "/proc/sys",
- "/proc/sysrq-trigger",
- },
- Namespaces: []specs.LinuxNamespace{
- {Type: specs.MountNamespace},
- {Type: specs.NetworkNamespace},
- {Type: specs.UTSNamespace},
- {Type: specs.PIDNamespace},
- {Type: specs.IPCNamespace},
- },
- // Devices implicitly contains the following devices:
- // null, zero, full, random, urandom, tty, console, and ptmx.
- // ptmx is a bind mount or symlink of the container's ptmx.
- // See also: https://github.com/opencontainers/runtime-spec/blob/master/config-linux.md#default-devices
- Devices: []specs.LinuxDevice{},
- Resources: &specs.LinuxResources{
- Devices: []specs.LinuxDeviceCgroup{
- {
- Allow: false,
- Access: "rwm",
- },
- {
- Allow: true,
- Type: "c",
- Major: iPtr(1),
- Minor: iPtr(5),
- Access: "rwm",
- },
- {
- Allow: true,
- Type: "c",
- Major: iPtr(1),
- Minor: iPtr(3),
- Access: "rwm",
- },
- {
- Allow: true,
- Type: "c",
- Major: iPtr(1),
- Minor: iPtr(9),
- Access: "rwm",
- },
- {
- Allow: true,
- Type: "c",
- Major: iPtr(1),
- Minor: iPtr(8),
- Access: "rwm",
- },
- {
- Allow: true,
- Type: "c",
- Major: iPtr(5),
- Minor: iPtr(0),
- Access: "rwm",
- },
- {
- Allow: true,
- Type: "c",
- Major: iPtr(5),
- Minor: iPtr(1),
- Access: "rwm",
- },
- {
- Allow: false,
- Type: "c",
- Major: iPtr(10),
- Minor: iPtr(229),
- Access: "rwm",
- },
- },
- },
- },
- }
- }
|