mirror of
https://github.com/opencontainers/runtime-spec.git
synced 2026-02-06 03:45:05 +01:00
config: Make rlimits POSIX-specific
This property was initially Linux-specific. 718f9f3f (minor narrative
cleanup regarding config compatibility, 2017-01-30, #673) removed the
Linux restriction, but the rlimit concept is from POSIX and Windows
doesn't support it [1]. This commit adds new subsections for the
POSIX-specific and Linux-specific process entries (to match the
approach we currently use for process.user), and punts to POSIX for
the Solaris values and compliance testing approach. If/when we get a
Solaris-specific doc for valid values, we can replace the POSIX punt
there, but we probably want to continue punting to POSIX for
getrlimit(3)-based compliance testing.
I've renamed the overly-specific LinuxRlimit to POSIXRlimit. We could
use the generic Rlimit, but then we'd be stuck if/when Windows adds
support for some rlimit-like thing that doesn't match up cleanly
enough for us to use the POSIX structure.
[1]: https://github.com/opencontainers/runtime-spec/pull/835#issuecomment-303455386
Signed-off-by: W. Trevor King <wking@tremily.us>
This commit is contained in:
committed by
Daniel Dao
parent
717af41bcc
commit
5292e9c82b
31
config.md
31
config.md
@@ -156,17 +156,33 @@ For POSIX platforms the `mounts` structure has the following fields:
|
||||
* **`env`** (array of strings, OPTIONAL) with the same semantics as [IEEE Std 1003.1-2008's `environ`][ieee-1003.1-2008-xbd-c8.1].
|
||||
* **`args`** (array of strings, REQUIRED) with similar semantics to [IEEE Std 1003.1-2008 `execvp`'s *argv*][ieee-1003.1-2008-xsh-exec].
|
||||
This specification extends the IEEE standard in that at least one entry is REQUIRED, and that entry is used with the same semantics as `execvp`'s *file*.
|
||||
|
||||
### <a name="configLinuxAndSolarisProcess" />Linux and Solaris Process
|
||||
|
||||
For POSIX-based systems (Linux and Solaris), the `process` object supports the following process-specific properties:
|
||||
|
||||
* **`rlimits`** (array of objects, OPTIONAL) allows setting resource limits for the process.
|
||||
Each entry has the following structure:
|
||||
|
||||
* **`type`** (string, REQUIRED) - the platform resource being limited, for example on Linux as defined in the [setrlimit(2)][setrlimit.2] man page.
|
||||
* **`soft`** (uint64, REQUIRED) - the value of the limit enforced for the corresponding resource.
|
||||
* **`hard`** (uint64, REQUIRED) - the ceiling for the soft limit that could be set by an unprivileged process.
|
||||
Only a privileged process (e.g. under Linux: one with the CAP_SYS_RESOURCE capability) can raise a hard limit.
|
||||
* **`type`** (string, REQUIRED) the platform resource being limited.
|
||||
* Linux: valid values are defined in the [`getrlimit(2)`][getrlimit.2] man page, such as `RLIMIT_MSGQUEUE`.
|
||||
* Solaris: valid values are defined in the [`getrlimit(3)`][getrlimit.3] man page, such as `RLIMIT_CORE`.
|
||||
|
||||
If `rlimits` contains duplicated entries with same `type`, the runtime MUST error out.
|
||||
The runtime MUST [generate an error](runtime.md#errors) for any values which cannot be mapped to a relevant kernel interface
|
||||
For each entry in `rlimits`, a [`getrlimit(3)`][getrlimit.3] on `type` MUST succeed.
|
||||
For the following properties, `rlim` refers to the status returned by the `getrlimit(3)` call.
|
||||
|
||||
For Linux-based systems the process structure supports the following process-specific fields.
|
||||
* **`soft`** (uint64, REQUIRED) the value of the limit enforced for the corresponding resource.
|
||||
`rlim.rlim_cur` MUST match the configured value.
|
||||
* **`hard`** (uint64, REQUIRED) the ceiling for the soft limit that could be set by an unprivileged process.
|
||||
`rlim.rlim_max` MUST match the configured value.
|
||||
Only a privileged process (e.g. one with the `CAP_SYS_RESOURCE` capability) can raise a hard limit.
|
||||
|
||||
If `rlimits` contains duplicated entries with same `type`, the runtime MUST [generate an error](runtime.md#errors).
|
||||
|
||||
### <a name="configLinuxProcess" />Linux Process
|
||||
|
||||
For Linux-based systems, the `process` object supports the following process-specific properties.
|
||||
|
||||
* **`apparmorProfile`** (string, OPTIONAL) specifies the name of the AppArmor profile for the process.
|
||||
For more information about AppArmor, see [AppArmor documentation][apparmor].
|
||||
@@ -837,7 +853,8 @@ Here is a full example `config.json` for reference.
|
||||
[mount.8]: http://man7.org/linux/man-pages/man8/mount.8.html
|
||||
[mount.8-filesystem-independent]: http://man7.org/linux/man-pages/man8/mount.8.html#FILESYSTEM-INDEPENDENT_MOUNT%20OPTIONS
|
||||
[mount.8-filesystem-specific]: http://man7.org/linux/man-pages/man8/mount.8.html#FILESYSTEM-SPECIFIC_MOUNT%20OPTIONS
|
||||
[setrlimit.2]: http://man7.org/linux/man-pages/man2/setrlimit.2.html
|
||||
[getrlimit.2]: http://man7.org/linux/man-pages/man2/getrlimit.2.html
|
||||
[getrlimit.3]: http://pubs.opengroup.org/onlinepubs/9699919799/functions/getrlimit.html
|
||||
[stdin.3]: http://man7.org/linux/man-pages/man3/stdin.3.html
|
||||
[uts-namespace.7]: http://man7.org/linux/man-pages/man7/namespaces.7.html
|
||||
[zonecfg.1m]: http://docs.oracle.com/cd/E86824_01/html/E54764/zonecfg-1m.html
|
||||
|
||||
@@ -45,7 +45,7 @@ type Process struct {
|
||||
// Capabilities are Linux capabilities that are kept for the process.
|
||||
Capabilities *LinuxCapabilities `json:"capabilities,omitempty" platform:"linux"`
|
||||
// Rlimits specifies rlimit options to apply to the process.
|
||||
Rlimits []LinuxRlimit `json:"rlimits,omitempty" platform:"linux"`
|
||||
Rlimits []POSIXRlimit `json:"rlimits,omitempty" platform:"linux,solaris"`
|
||||
// NoNewPrivileges controls whether additional privileges could be gained by processes in the container.
|
||||
NoNewPrivileges bool `json:"noNewPrivileges,omitempty" platform:"linux"`
|
||||
// ApparmorProfile specifies the apparmor profile for the container.
|
||||
@@ -202,8 +202,8 @@ type LinuxIDMapping struct {
|
||||
Size uint32 `json:"size"`
|
||||
}
|
||||
|
||||
// LinuxRlimit type and restrictions
|
||||
type LinuxRlimit struct {
|
||||
// POSIXRlimit type and restrictions
|
||||
type POSIXRlimit struct {
|
||||
// Type of the rlimit to set
|
||||
Type string `json:"type"`
|
||||
// Hard is the hard limit for the specified type
|
||||
|
||||
Reference in New Issue
Block a user