Container Factory API

The container factory service provides the ability to create new containers form a container image, or from a container configuration.

Create

Create a container from a single container image reference with an option to start it.

Request

Hono Command: command//<name>:<namespace>:edge:containers/req//create

Ditto Message:

NameValueDescription
topic<name>/<namespace>:edge:containers/things/live/messages/createInformation about the affected Thing and the type of operation
path/features/ContainerFactory/inbox/messages/createA path to the ContainerFactory Feature, it’s message channel, and command
HeadersAdditional headers
response-requiredtrue/falseIf response is required
content-typeapplication/jsonThe content type
correlation-idcontainer UUIDThe container UUID
Value
imageRefURLFully qualified image reference, that follows the OCI Image Specification, the format is: host[:port]/[namespace/]name:tag
starttrue/falseStart or only create the container

Example : Create and automatically start a new Hello World container.

Topic: command//edge:device:edge:containers/req//create

{
	"topic":"edge/device:edge:containers/things/live/messages/create",
	"headers":{
		"response-required":true,
		"content-type":"application/json",
		"correlation-id":"<UUID>"
	},
	"path":"/features/ContainerFactory/inbox/messages/create",
	"value":{
		"imageRef":"docker.io/library/hello-world:latest",
		"start":true
	}
}
Response

Hono Command : command//<name>:<namespace>:edge:containers/res//create

Ditto Message:

NameValueDescription
topic<name>/<namespace>:edge:containers/things/live/messages/createInformation about the affected Thing and the type of operation
path/features/ContainerFactory/outbox/messages/createA path to the Feature, it’s message channel, and command
HeadersAdditional headers
content-typeapplication/jsonThe content type
correlation-id<UUID>The same correlation id as the request message
ValueUUID of the created container

Example : Response of a create operation.

Topic: `command//edge:device:edge:containers/res//create``

{
	"topic":"edge/device:edge:containers/things/live/messages/create",
	"headers":{
		"content-type":"application/json",
		"correlation-id":"<UUID>"
	},
	"path":"/features/ContainerFactory/outbox/messages/create",
	"value":"<Container UUID>"
}

Create with config

Create a container with a specified container configuration.

Request

Hono Command: command//<name>:<namespace>:edge:containers/req//createWithConfig

Ditto Message:

NameValueDescription
topic<name>/<namespace>:edge:containers/things/live/messages/createWithConfigInformation about the affected Thing and the type of operation
path/features/ContainerFactory/inbox/messages/createWithConfigA path to the ContainerFactory Feature, it’s message channel, and command
HeadersAdditional headers
response-requiredtrue/falseIf response is required
content-typeapplication/jsonThe content type
correlation-idcontainer UUIDThe container UUID
Value
imageRefURLFully qualified image reference, that follows the OCI Image Specification, the format is: host[:port]/[namespace/]name:tag
starttrue/falseForce to start created container
configjson presentation of the configuration
domainNameDomain name inside the container, if omitted the container’s domain name will be set to a system-defined value
hostNameHost name for the container, if omitted the container’s hostname will be set to a system-defined value
envAn array of environment variables that are set into the container
cmdAn array of command with arguments that is executed upon the container’s start
privilegedfalseGrant root capabilities to all devices on the host system
extraHostsAn array of additional extra host names to IP address mappings added to the container network configuration, the format is: hostname:ip. If the IP of the host machine is to be added to the container’s hosts file the reserved host_ip[] must be provided. If only host_ip (the network-interface part is skipped) is used, by default it will be resolved to the host’s IP on the default bridge network interface for containerm (the default configuration is kanto-cm0) and add it to the container’s hosts file. If the IP of a container in the same bridge network is to be added to the hosts file the reserved container<container-host_name> must be provided.
extraCapabilitiesAn array of additional capabilities for a container
networkModeThe container’s networking capabilities type based on the desired communication mode. The possible options are: bridge or host
openStdintrue/falseOpen the terminal’s standard input for an interaction with the current container
ttytrue/falseAttach standard streams to a TTY
mountPointsAn array of the mount points
sourcePath to the file or directory on the host that is referred from within the container
destinationPath to the file or directory that is mounted inside the container
propagationModeBind propagation for the mount, supported are: rprivate, private, rshared, shared, rslave or slave
decryption
keysA string array of private keys (GPG private key ring, JWE or PKCS7) used for decrypting the container’s image, the format is: filepath_private_key[:password]
recipientsA string array of recipients (only for PKCS7 and must be an x509) used for decrypting the container’s image, the format is: pkcs7:filepath_x509_certificate
devicesAn array of accessible devices from the host
pathOnHostPath to the device on the host
pathInContainerPath to the device in the container
cgroupPermissionsrwmCgroup permissions for the device access, possible options are: r(read), w(write), m(mknod) and all combinations are possible
restartPolicyThe container restart policy
typeunless-stoppedThe container’s restart policy, the supported types are: always, no, on-failure and unless-stopped
maxRetryCountMaximum number of retries that are made to restart the container on exit with fail, if the type is on-failure
retryTimeoutTimeout period in seconds for each retry that is made to restart the container on exit with fail, if the type is on-failure
portMappingsAn array of port mappings from the host to a container
prototcpProtocol used for the port mapping from the container to the host, the possible options are: tcp and udp
containerPortPort number on the container that is mapped to the host port
hostIP0.0.0.0Host IP address
hostPortBeginning of the host ports range
hostPortEnd<host_port>Ending of the host ports range
log
typejson-fileType in which the logs are produced, the possible options are: json-file or none
maxFiles2Maximum log files before getting rotated
maxSize100MMaximum log file size before getting rotated as a number with a unit suffix of B, K, M and G
rootDir<meta_path>/containers/<container_id>Root directory where the container’s log messages are stored
modeblockingMessaging delivery mode from the container to the log driver, the supported modes are: blocking and non-blocking
maxBufferSize1MMaximum size of the buffered container’s log messages in a non-blocking mode as a number with a unit suffix of B, K, M and G
resources
memoryHard memory limitation of the container as a number with a unit suffix of B, K, M and G, the minimum allowed value is 3M
memoryReservationSoft memory limitation of the container as a number with a unit suffix of B, K, M and G, if memory is specified, the memoryReservation must be smaller than it
memorySwapTotal amount of memory and swap that the container can use as a number with a unit suffix of B, K, M and G, use -1 to allow the container to use unlimited swap

Example : Create and automatically start a new Hello World container.

Topic: command//edge:device:edge:containers/req//createWithConfig

{
	"topic":"edge/device:edge:containers/things/live/messages/createWithConfig",
	"headers":{
		"response-required":true,
		"content-type":"application/json",
		"correlation-id":"<UUID>"
	},
	"path":"/features/ContainerFactory/inbox/messages/createWithConfig",
	"value":{
		"imageRef":"docker.io/library/influxdb:1.8.4",
		"start":true,
		"config":{
			"domainName": "",
			"hostName": "",
			"env": [],
			"cmd": [],
			"privileged": false,
			"extraHosts": ["ctrhost:host_ip"],
			"extraCapabilities": [],
			"networkMode": "bridge",
			"openStdin": false,
			"tty": false,
			"mountPoints": [
				{
					"source": "",
					"destination": "",
					"propagationMode": "rprivate"
				}
			],
			"decryption": {
				"keys": [],
				"recipients": []
			},
			"devices": [
				{
					"pathOnHost": "",
					"pathInContainer": "",
					"cgroupPermissions": "rwm"
				}
			],
			"restartPolicy": {
				"type": "unless-stopped",
				"maxRetryCount": 0,
				"retryTimeout": 0
			},
			"portMappings":[
				{
					"proto": "tcp",
					"containerPort": 80,
					"hostIP": "0.0.0.0",
					"hostPort": 5000,
					"hostPortEnd": 5005,
				}
			],
			"log": {
				"type": "json-file",
				"maxFiles": 2,
				"maxSize": "100M",
				"rootDir": "",
				"mode": "blocking",
				"maxBufferSize": "1M"
			},
			"resources": {
				"memory": "",
				"memoryReservation": "",
				"memorySwap": ""
			},
		}
    }
}
Response

Hono Command : command//<name>:<namespace>:edge:containers/res//createWithConfig

Ditto Message:

NameValueDescription
topic<name>/<namespace>:edge:containers/things/live/messages/createWithConfigInformation about the affected Thing and the type of operation
path/features/ContainerFactory/outbox/messages/createWithConfigA path to the ContainerFactory Feature, it’s message channel, and command
HeadersAdditional headers
content-typeapplication/jsonThe content type
correlation-id<UUID>
ValueUUID of the created container

Example : Response of a createWithConfig operation.

Topic: command//edge:device:edge:containers/res//createWithConfig

{
	"topic":"edge/device:edge:containers/things/live/messages/createWithConfig",
	"headers":{
		"content-type":"application/json",
		"correlation-id":"<UUID>"
	},
	"path":"/features/ContainerFactory/outbox/messages/createWithConfig",
	"value":"<Container UUID>"
}
Last modified June 28, 2024