Skip to content

Commit c41ea83

Browse files
committed
config: Make process optional
Since be59415 (Split create and start, 2016-04-01, #384), it's possible for a container process to never execute user-specified code (e.g. you can call 'create', 'kill', 'delete' without calling 'start'). For folks who expect to do that, there's no reason to define process.args. The only other process property required for all platforms is 'cwd', but the runtime's idler code isn't specified in sufficient detail for the configuration author to have an opinion about what its working directory should be. On Linux and Solaris, 'user' is also required for 'uid' and 'gid'. My preferred approach here is to make those optional and define defaults [1,2]: If unset, the runtime will not attempt to manipulate the user ID (e.g. not calling setuid(2) or similar). But the maintainer consensus is that they want those to be explicitly required properties [3,4,5]. With the current spec, one option could be to make process optional (with the idler's working directory unspecified) for OSes besides Linux and Solaris. On Windows, username is optional, but that was likely accidental [6]. So an unspecified 'process' would leave process.cwd and process.user unset. What that means for the implementation-defined container process between 'create' and 'start' is unclear, but clarifying how that is handled is a separate issue [7] independent of whether 'process' is optional or not. [1]: #417 (comment) [2]: https://groups.google.com/a/opencontainers.org/forum/#!topic/dev/DWdystx5X3A Subject: Exposing platform defaults Date: Thu, 14 Jan 2016 15:36:26 -0800 Message-ID: <20160114233625.GN6362@odin.tremily.us> [3]: http://ircbot.wl.linuxfoundation.org/meetings/opencontainers/2016/opencontainers.2016-05-04-17.00.log.html#l-44 [4]: #417 (comment) [5]: #417 (comment) [6]: #618 (comment) [7]: #700 Signed-off-by: W. Trevor King <wking@tremily.us>
1 parent 2d491b0 commit c41ea83

File tree

4 files changed

+4
-3
lines changed

4 files changed

+4
-3
lines changed

config.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,8 @@ For Windows, see links for details about [mountvol](http://ss64.com/nt/mountvol.
120120

121121
## Process
122122

123-
**`process`** (object, REQUIRED) specifies the container process.
123+
**`process`** (object, OPTIONAL) specifies the container process.
124+
This property is REQUIRED when [`start`](runtime.md#start) is called.
124125

125126
* **`terminal`** (bool, OPTIONAL) specifies whether a terminal is attached to that process, defaults to false.
126127
As an example, if set to true on Linux a pseudoterminal pair is allocated for the container process and the pseudoterminal slave is duplicated on the container process's [standard streams][stdin.3].

runtime.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ This operation MUST generate an error if it is not provided the container ID.
107107
Attempting to start a container that does not exist MUST generate an error.
108108
Attempting to start an already started container MUST have no effect on the container and MUST generate an error.
109109
This operation MUST run the user-specified program as specified by [`process`](config.md#process).
110+
This operation MUST generate an error if `process` was not set.
110111

111112
Upon successful completion of this operation the `status` property of this container MUST be `running`.
112113

schema/config-schema.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,6 @@
229229
"required": [
230230
"ociVersion",
231231
"platform",
232-
"process",
233232
"root"
234233
]
235234
}

specs-go/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ type Spec struct {
99
// Platform specifies the configuration's target platform.
1010
Platform Platform `json:"platform"`
1111
// Process configures the container process.
12-
Process Process `json:"process"`
12+
Process *Process `json:"process,omitempty"`
1313
// Root configures the container's root filesystem.
1414
Root Root `json:"root"`
1515
// Hostname configures the container's hostname.

0 commit comments

Comments
 (0)