Skip to content
This repository has been archived by the owner on Oct 30, 2018. It is now read-only.

Commit

Permalink
Add support for setting containerd namespace in runtime config
Browse files Browse the repository at this point in the history
This adds a namespace field to override the LinuxKit containerd
default namespace, in case you want to run a container in another
namespace.

Needs a patch in LinuxKit to implement this that I will open soon.

Signed-off-by: Justin Cormack <justin.cormack@docker.com>
  • Loading branch information
justincormack committed Jan 17, 2018
1 parent 978dece commit 2dd65d2
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 1 deletion.
1 change: 1 addition & 0 deletions docs/yaml.md
Expand Up @@ -202,6 +202,7 @@ which specifies some actions to take place when the container is being started.
- `peer` specifies the name of the other end when creating a `veth` interface. This end will remain in the root namespace, where it can be attached to a bridge. Specifying this implies `add: veth`.
- `bindNS` specifies a namespace type and a path where the namespace from the container being created will be bound. This allows a namespace to be set up in an `onboot` container, and then
using `net: path` for a `service` container to use that network namespace later.
- `namespace` overrides the LinuxKit default containerd namespace to put the container in; only applicable to services.

An example of using the `runtime` config to configure a network namespace with `wireguard` and then run `nginx` in that namespace is shown below:
```
Expand Down
3 changes: 3 additions & 0 deletions src/moby/config.go
Expand Up @@ -115,6 +115,7 @@ type Runtime struct {
Mkdir *[]string `yaml:"mkdir,omitempty" json:"mkdir,omitempty"`
Interfaces *[]Interface `yaml:"interfaces,omitempty,omitempty" json:"interfaces,omitempty"`
BindNS Namespaces `yaml:"bindNS,omitempty" json:"bindNS,omitempty"`
Namespace *string `yaml:"namespace,omitempty" json:"namespace,omitempty"`
}

// Namespaces is the type for configuring paths to bind namespaces
Expand Down Expand Up @@ -588,6 +589,7 @@ func assignRuntime(v1, v2 *Runtime) Runtime {
runtimeMounts := assignBinds(v1.Mounts, v2.Mounts)
runtimeMkdir := assignStrings(v1.Mkdir, v2.Mkdir)
runtimeInterfaces := assignRuntimeInterfaceArray(v1.Interfaces, v2.Interfaces)
runtimeNamespace := assignString(v1.Namespace, v2.Namespace)
runtime := Runtime{
Cgroups: &runtimeCgroups,
Mounts: &runtimeMounts,
Expand All @@ -602,6 +604,7 @@ func assignRuntime(v1, v2 *Runtime) Runtime {
User: assignStringPtr(v1.BindNS.User, v2.BindNS.User),
Uts: assignStringPtr(v1.BindNS.Uts, v2.BindNS.Uts),
},
Namespace: &runtimeNamespace,
}
return runtime
}
Expand Down
3 changes: 2 additions & 1 deletion src/moby/schema.go
Expand Up @@ -248,7 +248,8 @@ var schema = string(`
"mounts": {"$ref": "#/definitions/mounts"},
"mkdir": {"$ref": "#/definitions/strings"},
"interfaces": {"$ref": "#/definitions/interfaces"},
"bindNS": {"$ref": "#/definitions/namespaces"}
"bindNS": {"$ref": "#/definitions/namespaces"},
"namespace": {"type": "string"}
}
},
"image": {
Expand Down

0 comments on commit 2dd65d2

Please sign in to comment.