7 "github.com/opencontainers/runtime-spec/specs-go"
10 func iPtr(i int64) *int64 { return &i }
11 func u32Ptr(i int64) *uint32 { u := uint32(i); return &u }
12 func fmPtr(i int64) *os.FileMode { fm := os.FileMode(i); return &fm }
14 func defaultCapabilities() []string {
26 "CAP_NET_BIND_SERVICE",
33 // DefaultSpec returns the default spec used by docker for the current Platform
34 func DefaultSpec() specs.Spec {
35 return DefaultOSSpec(runtime.GOOS)
38 // DefaultOSSpec returns the spec for a given OS
39 func DefaultOSSpec(osName string) specs.Spec {
40 if osName == "windows" {
41 return DefaultWindowsSpec()
42 } else if osName == "solaris" {
43 return DefaultSolarisSpec()
45 return DefaultLinuxSpec()
49 // DefaultWindowsSpec create a default spec for running Windows containers
50 func DefaultWindowsSpec() specs.Spec {
52 Version: specs.Version,
53 Platform: specs.Platform{
57 Windows: &specs.Windows{},
61 // DefaultSolarisSpec create a default spec for running Solaris containers
62 func DefaultSolarisSpec() specs.Spec {
65 Platform: specs.Platform{
70 s.Solaris = &specs.Solaris{}
74 // DefaultLinuxSpec create a default spec for running Linux containers
75 func DefaultLinuxSpec() specs.Spec {
77 Version: specs.Version,
78 Platform: specs.Platform{
83 s.Mounts = []specs.Mount{
88 Options: []string{"nosuid", "noexec", "nodev"},
94 Options: []string{"nosuid", "strictatime", "mode=755"},
97 Destination: "/dev/pts",
100 Options: []string{"nosuid", "noexec", "newinstance", "ptmxmode=0666", "mode=0620", "gid=5"},
106 Options: []string{"nosuid", "noexec", "nodev", "ro"},
109 Destination: "/sys/fs/cgroup",
112 Options: []string{"ro", "nosuid", "noexec", "nodev"},
115 Destination: "/dev/mqueue",
118 Options: []string{"nosuid", "noexec", "nodev"},
121 s.Process.Capabilities = &specs.LinuxCapabilities{
122 Bounding: defaultCapabilities(),
123 Permitted: defaultCapabilities(),
124 Inheritable: defaultCapabilities(),
125 Effective: defaultCapabilities(),
128 s.Linux = &specs.Linux{
129 MaskedPaths: []string{
131 "/proc/latency_stats",
136 ReadonlyPaths: []string{
142 "/proc/sysrq-trigger",
144 Namespaces: []specs.LinuxNamespace{
151 // Devices implicitly contains the following devices:
152 // null, zero, full, random, urandom, tty, console, and ptmx.
153 // ptmx is a bind-mount or symlink of the container's ptmx.
154 // See also: https://github.com/opencontainers/runtime-spec/blob/master/config-linux.md#default-devices
155 Devices: []specs.LinuxDevice{},
156 Resources: &specs.LinuxResources{
157 Devices: []specs.LinuxDeviceCgroup{
215 // For LCOW support, don't mask /sys/firmware
216 if runtime.GOOS != "windows" {
217 s.Linux.MaskedPaths = append(s.Linux.MaskedPaths, "/sys/firmware")