From aaa314c3a3d55d8c44465ce77adb38aea333e16e Mon Sep 17 00:00:00 2001 From: Alexander Morozov Date: Wed, 2 Sep 2015 08:42:54 -0700 Subject: [PATCH] Change layout of mountpoints and mounts Added info about MountPoints to config.md. Signed-off-by: Alexander Morozov --- config.md | 19 +++++++++++++++++++ runtime-config.md | 30 ++++++++++++++++-------------- runtime_config.go | 8 ++++---- 3 files changed, 39 insertions(+), 18 deletions(-) diff --git a/config.md b/config.md index 00f24aa6f..a3d818d95 100644 --- a/config.md +++ b/config.md @@ -34,6 +34,25 @@ Each container has exactly one *root filesystem*, specified in the *root* object } ``` +## Mount Points + +You can add array of mount points inside container. Each record in this array +must have configuration in runtime config in *mounts object*, where keys are +*name* of mount point. + +* **name** (string, required) Name of mount point. Used for configuration lookup +in runtime config. +* **path** (string, required) Destination of mount point: path inside container. + +*Example* + +```json +"mounts": { + "name": "proc", + "path": "/proc", +} +``` + ## Process configuration * **terminal** (bool, optional) specifies whether you want a terminal attached to that process. Defaults to false. diff --git a/runtime-config.md b/runtime-config.md index 6074e98bf..dfdfacbd3 100644 --- a/runtime-config.md +++ b/runtime-config.md @@ -1,6 +1,12 @@ ## Mount Configuration -Additional filesystems can be declared as "mounts", specified in the *mounts* array. The parameters are similar to the ones in Linux mount system call. [http://linux.die.net/man/2/mount](http://linux.die.net/man/2/mount) +Additional filesystems can be declared as "mounts", specified in the *mounts* object. +Keys in this object are names of mount points from portable config. +Values are objects with configuration of mount points. +The parameters are similar to the ones in Linux mount system call. +[http://linux.die.net/man/2/mount](http://linux.die.net/man/2/mount) +Note, that only mount points which listed in portable configuration will be +really mounted. * **type** (string, required) Linux, *filesystemtype* argument supported by the kernel are listed in */proc/filesystems* (e.g., "minix", "ext2", "ext3", "jfs", "xfs", "reiserfs", "msdos", "proc", "nfs", "iso9660"). Windows: ntfs * **source** (string, required) a device name, but can also be a directory name or a dummy. Windows, the volume name that is the target of the mount point. \\?\Volume\{GUID}\ (on Windows source is called target) @@ -10,45 +16,41 @@ Additional filesystems can be declared as "mounts", specified in the *mounts* ar *Example (Linux)* ```json -"mounts": [ - { +"mounts": { + "proc": { "type": "proc", "source": "proc", - "destination": "/proc", "options": [] }, - { + "dev": { "type": "tmpfs", "source": "tmpfs", - "destination": "/dev", "options": ["nosuid","strictatime","mode=755","size=65536k"] }, - { + "devpts": { "type": "devpts", "source": "devpts", - "destination": "/dev/pts", "options": ["nosuid","noexec","newinstance","ptmxmode=0666","mode=0620","gid=5"] }, - { + "data": { "type": "bind", "source": "/volumes/testing", - "destination": "/data", "options": ["rbind","rw"] } -] +} ``` *Example (Windows)* ```json -"mounts": [ - { +"mounts": { + "myfancymountpoint": { "type": "ntfs", "source": "\\\\?\\Volume\\{2eca078d-5cbc-43d3-aff8-7e8511f60d0e}\\", "destination": "C:\\Users\\crosbymichael\\My Fancy Mount Point\\", "options": [] } -] +} ``` See links for details about [mountvol](http://ss64.com/nt/mountvol.html) and [SetVolumeMountPoint](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365561(v=vs.85).aspx) in Windows. diff --git a/runtime_config.go b/runtime_config.go index 9a08ab96d..18de44232 100644 --- a/runtime_config.go +++ b/runtime_config.go @@ -1,8 +1,10 @@ package specs type RuntimeSpec struct { - // Mounts profile configuration for adding mounts to the container's filesystem. - Mounts []Mount `json:"mounts"` + // Mounts is a mapping of names to mount configuration. + // Which mounts will be mounted and where should be chosen with MountPoints + // in Spec. + Mounts map[string]Mount `json:"mounts"` // Hooks are the commands run at various lifecycle events of the container. Hooks Hooks `json:"hooks"` } @@ -29,8 +31,6 @@ type Mount struct { // Source specifies the source path of the mount. In the case of bind mounts on // linux based systems this would be the file on the host. Source string `json:"source"` - // Destination is the path where the mount will be placed relative to the container's root. - Destination string `json:"destination"` // Options are fstab style mount options. Options []string `json:"options"` }