1% "DOCKERD" "8" "SEPTEMBER 2015" "Docker Community" "Docker User Manuals"
2
3# NAME
4dockerd - Enable daemon mode
5
6# SYNOPSIS
7**dockerd**
8[**--add-runtime**[=*[]*]]
9[**--allow-nondistributable-artifacts**[=*[]*]]
10[**--api-cors-header**=[=*API-CORS-HEADER*]]
11[**--authorization-plugin**[=*[]*]]
12[**-b**|**--bridge**[=*BRIDGE*]]
13[**--bip**[=*BIP*]]
14[**--cgroup-parent**[=*[]*]]
15[**--cluster-store**[=*[]*]]
16[**--cluster-advertise**[=*[]*]]
17[**--cluster-store-opt**[=*map[]*]]
18[**--config-file**[=*/etc/docker/daemon.json*]]
19[**--containerd**[=*SOCKET-PATH*]]
20[**--data-root**[=*/var/lib/docker*]]
21[**-D**|**--debug**]
22[**--default-cgroupns-mode**[=*host*]]
23[**--default-gateway**[=*DEFAULT-GATEWAY*]]
24[**--default-gateway-v6**[=*DEFAULT-GATEWAY-V6*]]
25[**--default-address-pool**[=*DEFAULT-ADDRESS-POOL*]]
26[**--default-runtime**[=*runc*]]
27[**--default-ipc-mode**=*MODE*]
28[**--default-shm-size**[=*64MiB*]]
29[**--default-ulimit**[=*[]*]]
30[**--dns**[=*[]*]]
31[**--dns-opt**[=*[]*]]
32[**--dns-search**[=*[]*]]
33[**--exec-opt**[=*[]*]]
34[**--exec-root**[=*/var/run/docker*]]
35[**--experimental**[=*false*]]
36[**--fixed-cidr**[=*FIXED-CIDR*]]
37[**--fixed-cidr-v6**[=*FIXED-CIDR-V6*]]
38[**-G**|**--group**[=*docker*]]
39[**-H**|**--host**[=*[]*]]
40[**--help**]
41[**--icc**[=*true*]]
42[**--init**[=*false*]]
43[**--init-path**[=*""*]]
44[**--insecure-registry**[=*[]*]]
45[**--ip**[=*0.0.0.0*]]
46[**--ip-forward**[=*true*]]
47[**--ip-masq**[=*true*]]
48[**--iptables**[=*true*]]
49[**--ipv6**]
50[**--isolation**[=*default*]]
51[**-l**|**--log-level**[=*info*]]
52[**--label**[=*[]*]]
53[**--live-restore**[=*false*]]
54[**--log-driver**[=*json-file*]]
55[**--log-opt**[=*map[]*]]
56[**--mtu**[=*0*]]
57[**--max-concurrent-downloads**[=*3*]]
58[**--max-concurrent-uploads**[=*5*]]
59[**--max-download-attempts**[=*5*]]
60[**--node-generic-resources**[=*[]*]]
61[**-p**|**--pidfile**[=*/var/run/docker.pid*]]
62[**--raw-logs**]
63[**--registry-mirror**[=*[]*]]
64[**-s**|**--storage-driver**[=*STORAGE-DRIVER*]]
65[**--seccomp-profile**[=*SECCOMP-PROFILE-PATH*]]
66[**--selinux-enabled**]
67[**--shutdown-timeout**[=*15*]]
68[**--storage-opt**[=*[]*]]
69[**--swarm-default-advertise-addr**[=*IP|INTERFACE*]]
70[**--tls**]
71[**--tlscacert**[=*~/.docker/ca.pem*]]
72[**--tlscert**[=*~/.docker/cert.pem*]]
73[**--tlskey**[=*~/.docker/key.pem*]]
74[**--tlsverify**]
75[**--userland-proxy**[=*true*]]
76[**--userland-proxy-path**[=*""*]]
77[**--userns-remap**[=*default*]]
78
79# DESCRIPTION
80**dockerd** is used for starting the Docker daemon (i.e., to command the daemon
81to manage images, containers etc).  So **dockerd** is a server, as a daemon.
82
83To run the Docker daemon you can specify **dockerd**.
84You can check the daemon options using **dockerd --help**.
85Daemon options should be specified after the **dockerd** keyword in the
86following format.
87
88**dockerd [OPTIONS]**
89
90# OPTIONS
91
92**--add-runtime**=[]
93  Runtimes can be registered with the daemon either via the
94configuration file or using the `--add-runtime` command line argument.
95
96  The following is an example adding 2 runtimes via the configuration:
97
98```json
99{
100	"default-runtime": "runc",
101	"runtimes": {
102		"runc": {
103			"path": "runc"
104		},
105		"custom": {
106			"path": "/usr/local/bin/my-runc-replacement",
107			"runtimeArgs": [
108				"--debug"
109			]
110		}
111	}
112}
113```
114
115  This is the same example via the command line:
116
117```bash
118$ sudo dockerd --add-runtime runc=runc --add-runtime custom=/usr/local/bin/my-runc-replacement
119```
120
121  **Note**: defining runtime arguments via the command line is not supported.
122
123**--allow-nondistributable-artifacts**=[]
124  Push nondistributable artifacts to the specified registries.
125
126  List can contain elements with CIDR notation to specify a whole subnet.
127
128  This option is useful when pushing images containing nondistributable
129  artifacts to a registry on an air-gapped network so hosts on that network can
130  pull the images without connecting to another server.
131
132  **Warning**: Nondistributable artifacts typically have restrictions on how
133  and where they can be distributed and shared. Only use this feature to push
134  artifacts to private registries and ensure that you are in compliance with
135  any terms that cover redistributing nondistributable artifacts.
136
137**--api-cors-header**=""
138  Set CORS headers in the Engine API. Default is cors disabled. Give urls like
139  "http://foo, http://bar, ...". Give "*" to allow all.
140
141**--authorization-plugin**=""
142  Set authorization plugins to load
143
144**-b**, **--bridge**=""
145  Attach containers to a pre\-existing network bridge; use 'none' to disable
146  container networking
147
148**--bip**=""
149  Use the provided CIDR notation address for the dynamically created bridge
150  (docker0); Mutually exclusive of \-b
151
152**--cgroup-parent**=""
153  Set parent cgroup for all containers. Default is "/docker" for fs cgroup
154  driver and "system.slice" for systemd cgroup driver.
155
156**--cluster-store**=""
157  URL of the distributed storage backend
158
159**--cluster-advertise**=""
160  Specifies the 'host:port' or `interface:port` combination that this
161  particular daemon instance should use when advertising itself to the cluster.
162  The daemon is reached through this value.
163
164**--cluster-store-opt**=""
165  Specifies options for the Key/Value store.
166
167**--config-file**="/etc/docker/daemon.json"
168  Specifies the JSON file path to load the configuration from.
169
170**--containerd**=""
171  Path to containerd socket.
172
173**--data-root**=""
174  Path to the directory used to store persisted Docker data such as
175  configuration for resources, swarm cluster state, and filesystem data for
176  images, containers, and local volumes. Default is `/var/lib/docker`.
177
178**-D**, **--debug**=*true*|*false*
179  Enable debug mode. Default is false.
180
181**--default-cgroupns-mode**="**host**|**private**"
182  Set the default cgroup namespace mode for newly created containers. The argument
183  can either be **host** or **private**. If unset, this defaults to `host` on cgroup v1,
184`private` on cgroup v2.
185
186**--default-gateway**=""
187  IPv4 address of the container default gateway; this address must be part of
188  the bridge subnet (which is defined by \-b or \--bip)
189
190**--default-gateway-v6**=""
191  IPv6 address of the container default gateway
192
193**--default-address-pool**=""
194  Default address pool from which IPAM driver selects a subnet for the networks.
195  Example: base=172.30.0.0/16,size=24 will set the default
196  address pools for the selected scope networks to {172.30.[0-255].0/24}
197
198**--default-runtime**="runc"
199  Set default runtime if there're more than one specified by `--add-runtime`.
200
201**--default-ipc-mode**="**private**|**shareable**"
202  Set the default IPC mode for newly created containers. The argument
203  can either be **private** or **shareable**.
204
205**--default-shm-size**=*64MiB*
206  Set the daemon-wide default shm size for containers. Default is `64MiB`.
207
208**--default-ulimit**=[]
209  Default ulimits for containers.
210
211**--dns**=""
212  Force Docker to use specific DNS servers
213
214**--dns-opt**=""
215  DNS options to use.
216
217**--dns-search**=[]
218  DNS search domains to use.
219
220**--exec-opt**=[]
221  Set runtime execution options. See RUNTIME EXECUTION OPTIONS.
222
223**--exec-root**=""
224  Path to use as the root of the Docker execution state files. Default is
225  `/var/run/docker`.
226
227**--experimental**=""
228  Enable the daemon experimental features.
229
230**--fixed-cidr**=""
231  IPv4 subnet for fixed IPs (e.g., 10.20.0.0/16); this subnet must be nested in
232  the bridge subnet (which is defined by \-b or \-\-bip).
233
234**--fixed-cidr-v6**=""
235  IPv6 subnet for global IPv6 addresses (e.g., 2a00:1450::/64)
236
237**-G**, **--group**=""
238  Group to assign the unix socket specified by -H when running in daemon mode.
239  use '' (the empty string) to disable setting of a group. Default is `docker`.
240
241**-H**, **--host**=[*unix:///var/run/docker.sock*]: tcp://[host:port] to bind or
242unix://[/path/to/socket] to use.
243  The socket(s) to bind to in daemon mode specified using one or more
244  tcp://host:port, unix:///path/to/socket, fd://* or fd://socketfd.
245
246**--help**
247  Print usage statement
248
249**--icc**=*true*|*false*
250  Allow unrestricted inter\-container and Docker daemon host communication. If
251  disabled, containers can still be linked together using the **--link** option
252  (see **docker-run(1)**). Default is true.
253
254**--init**
255  Run an init process inside containers for signal forwarding and process
256  reaping.
257
258**--init-path**
259  Path to the docker-init binary.
260
261**--insecure-registry**=[]
262  Enable insecure registry communication, i.e., enable un-encrypted and/or
263  untrusted communication.
264
265  List of insecure registries can contain an element with CIDR notation to
266  specify a whole subnet. Insecure registries accept HTTP and/or accept HTTPS
267  with certificates from unknown CAs.
268
269  Enabling `--insecure-registry` is useful when running a local registry.
270  However, because its use creates security vulnerabilities it should ONLY be
271  enabled for testing purposes.  For increased security, users should add their
272  CA to their system's list of trusted CAs instead of using
273  `--insecure-registry`.
274
275**--ip**=""
276  Default IP address to use when binding container ports. Default is `0.0.0.0`.
277
278**--ip-forward**=*true*|*false*
279  Enables IP forwarding on the Docker host. The default is `true`. This flag
280  interacts with the IP forwarding setting on your host system's kernel. If
281  your system has IP forwarding disabled, this setting enables it. If your
282  system has IP forwarding enabled, setting this flag to `--ip-forward=false`
283  has no effect.
284
285  This setting will also enable IPv6 forwarding if you have both
286  `--ip-forward=true` and `--fixed-cidr-v6` set. Note that this may reject
287  Router Advertisements and interfere with the host's existing IPv6
288  configuration. For more information, please consult the documentation about
289  "Advanced Networking - IPv6".
290
291**--ip-masq**=*true*|*false*
292  Enable IP masquerading for bridge's IP range. Default is true.
293
294**--iptables**=*true*|*false*
295  Enable Docker's addition of iptables rules. Default is true.
296
297**--ipv6**=*true*|*false*
298  Enable IPv6 support. Default is false. Docker will create an IPv6-enabled
299  bridge with address fe80::1 which will allow you to create IPv6-enabled
300  containers. Use together with `--fixed-cidr-v6` to provide globally routable
301  IPv6 addresses. IPv6 forwarding will be enabled if not used with
302  `--ip-forward=false`. This may collide with your host's current IPv6
303  settings. For more information please consult the documentation about
304  "Advanced Networking - IPv6".
305
306**--isolation**="*default*"
307   Isolation specifies the type of isolation technology used by containers.
308   Note that the default on Windows server is `process`, and the default on
309   Windows client is `hyperv`. Linux only supports `default`.
310
311**-l**, **--log-level**="*debug*|*info*|*warn*|*error*|*fatal*"
312  Set the logging level. Default is `info`.
313
314**--label**="[]"
315  Set key=value labels to the daemon (displayed in `docker info`)
316
317**--live-restore**=*false*
318  Enable live restore of running containers when the daemon starts so that they
319  are not restarted. This option is applicable only for docker daemon running
320  on Linux host.
321
322**--log-driver**="*json-file*|*syslog*|*journald*|*gelf*|*fluentd*|*awslogs*|*splunk*|*etwlogs*|*gcplogs*|*none*"
323  Default driver for container logs. Default is `json-file`.
324  **Warning**: `docker logs` command works only for `json-file` logging driver.
325
326**--log-opt**=[]
327  Logging driver specific options.
328
329**--mtu**=*0*
330  Set the containers network mtu. Default is `0`.
331
332**--max-concurrent-downloads**=*3*
333  Set the max concurrent downloads for each pull. Default is `3`.
334
335**--max-concurrent-uploads**=*5*
336  Set the max concurrent uploads for each push. Default is `5`.
337
338**--max-download-attempts**=*5*
339  Set the max download attempts for each pull. Default is `5`.
340
341**--node-generic-resources**=*[]*
342  Advertise user-defined resource. Default is `[]`.
343  Use this if your swarm cluster has some nodes with custom
344  resources (e.g: NVIDIA GPU, SSD, ...) and you need your services to land on
345  nodes advertising these resources.
346  Usage example: `--node-generic-resources "NVIDIA-GPU=UUID1"
347  --node-generic-resources "NVIDIA-GPU=UUID2"`
348
349
350**-p**, **--pidfile**=""
351  Path to use for daemon PID file. Default is `/var/run/docker.pid`
352
353**--raw-logs**
354  Output daemon logs in full timestamp format without ANSI coloring. If this
355  flag is not set, the daemon outputs condensed, colorized logs if a terminal
356  is detected, or full ("raw") output otherwise.
357
358**--registry-mirror**=*<scheme>://<host>*
359  Prepend a registry mirror to be used for image pulls. May be specified
360  multiple times.
361
362**-s**, **--storage-driver**=""
363  Force the Docker runtime to use a specific storage driver.
364
365**--seccomp-profile**=""
366  Path to seccomp profile.
367
368**--selinux-enabled**=*true*|*false*
369  Enable selinux support. Default is false.
370
371**--shutdown-timeout**=*15*
372  Set the shutdown timeout value in seconds. Default is `15`.
373
374**--storage-opt**=[]
375  Set storage driver options. See STORAGE DRIVER OPTIONS.
376
377**--swarm-default-advertise-addr**=*IP|INTERFACE*
378  Set default address or interface for swarm to advertise as its
379  externally-reachable address to other cluster members. This can be a
380  hostname, an IP address, or an interface such as `eth0`. A port cannot be
381  specified with this option.
382
383**--tls**=*true*|*false*
384  Use TLS; implied by --tlsverify. Default is false.
385
386**--tlscacert**=*~/.docker/ca.pem*
387  Trust certs signed only by this CA.
388
389**--tlscert**=*~/.docker/cert.pem*
390  Path to TLS certificate file.
391
392**--tlskey**=*~/.docker/key.pem*
393  Path to TLS key file.
394
395**--tlsverify**=*true*|*false*
396  Use TLS and verify the remote (daemon: verify client, client: verify daemon).
397  Default is false.
398
399**--userland-proxy**=*true*|*false*
400  Rely on a userland proxy implementation for inter-container and
401  outside-to-container loopback communications. Default is true.
402
403**--userland-proxy-path**=""
404  Path to the userland proxy binary.
405
406**--userns-remap**=*default*|*uid:gid*|*user:group*|*user*|*uid*
407  Enable user namespaces for containers on the daemon. Specifying "default"
408  will cause a new user and group to be created to handle UID and GID range
409  remapping for the user namespace mappings used for contained processes.
410  Specifying a user (or uid) and optionally a group (or gid) will cause the
411  daemon to lookup the user and group's subordinate ID ranges for use as the
412  user namespace mappings for contained processes.
413
414# STORAGE DRIVER OPTIONS
415
416Docker uses storage backends (known as "graphdrivers" in the Docker
417internals) to create writable containers from images.  Many of these
418backends use operating system level technologies and can be
419configured.
420
421Specify options to the storage backend with **--storage-opt** flags. The
422backends that currently take options are *devicemapper*, *zfs* and *btrfs*.
423Options for *devicemapper* are prefixed with *dm*, options for *zfs*
424start with *zfs* and options for *btrfs* start with *btrfs*.
425
426Specifically for devicemapper, the default is a "loopback" model which
427requires no pre-configuration, but is extremely inefficient.  Do not
428use it in production.
429
430To make the best use of Docker with the devicemapper backend, you must
431have a recent version of LVM.  Use `lvm` to create a thin pool; for
432more information see `man lvmthin`.  Then, use `--storage-opt
433dm.thinpooldev` to tell the Docker engine to use that pool for
434allocating images and container snapshots.
435
436## Devicemapper options
437
438#### dm.thinpooldev
439
440Specifies a custom block storage device to use for the thin pool.
441
442If using a block device for device mapper storage, it is best to use `lvm`
443to create and manage the thin-pool volume. This volume is then handed to Docker
444to exclusively create snapshot volumes needed for images and containers.
445
446Managing the thin-pool outside of Engine makes for the most feature-rich
447method of having Docker utilize device mapper thin provisioning as the
448backing storage for Docker containers. The highlights of the lvm-based
449thin-pool management feature include: automatic or interactive thin-pool
450resize support, dynamically changing thin-pool features, automatic thinp
451metadata checking when lvm activates the thin-pool, etc.
452
453As a fallback if no thin pool is provided, loopback files are
454created. Loopback is very slow, but can be used without any
455pre-configuration of storage. It is strongly recommended that you do
456not use loopback in production. Ensure your Engine daemon has a
457`--storage-opt dm.thinpooldev` argument provided.
458
459Example use:
460
461   $ dockerd \
462         --storage-opt dm.thinpooldev=/dev/mapper/thin-pool
463
464#### dm.directlvm_device
465
466As an alternative to manually creating a thin pool as above, Docker can
467automatically configure a block device for you.
468
469Example use:
470
471   $ dockerd \
472         --storage-opt dm.directlvm_device=/dev/xvdf
473
474##### dm.thinp_percent
475
476Sets the percentage of passed in block device to use for storage.
477
478###### Example:
479
480   $ sudo dockerd \
481        --storage-opt dm.thinp_percent=95
482
483##### `dm.thinp_metapercent`
484
485Sets the percentage of the passed in block device to use for metadata storage.
486
487###### Example:
488
489   $ sudo dockerd \
490         --storage-opt dm.thinp_metapercent=1
491
492##### dm.thinp_autoextend_threshold
493
494Sets the value of the percentage of space used before `lvm` attempts to
495autoextend the available space [100 = disabled]
496
497###### Example:
498
499   $ sudo dockerd \
500         --storage-opt dm.thinp_autoextend_threshold=80
501
502##### dm.thinp_autoextend_percent
503
504Sets the value percentage value to increase the thin pool by when `lvm`
505attempts to autoextend the available space [100 = disabled]
506
507###### Example:
508
509   $ sudo dockerd \
510         --storage-opt dm.thinp_autoextend_percent=20
511
512#### dm.basesize
513
514Specifies the size to use when creating the base device, which limits
515the size of images and containers. The default value is 10G. Note,
516thin devices are inherently "sparse", so a 10G device which is mostly
517empty doesn't use 10 GB of space on the pool. However, the filesystem
518will use more space for base images the larger the device
519is.
520
521The base device size can be increased at daemon restart which will allow
522all future images and containers (based on those new images) to be of the
523new base device size.
524
525Example use: `dockerd --storage-opt dm.basesize=50G`
526
527This will increase the base device size to 50G. The Docker daemon will throw an
528error if existing base device size is larger than 50G. A user can use
529this option to expand the base device size however shrinking is not permitted.
530
531This value affects the system-wide "base" empty filesystem that may already
532be initialized and inherited by pulled images. Typically, a change to this
533value requires additional steps to take effect:
534
535        $ sudo service docker stop
536        $ sudo rm -rf /var/lib/docker
537        $ sudo service docker start
538
539Example use: `dockerd --storage-opt dm.basesize=20G`
540
541#### dm.fs
542
543Specifies the filesystem type to use for the base device. The
544supported options are `ext4` and `xfs`. The default is `ext4`.
545
546Example use: `dockerd --storage-opt dm.fs=xfs`
547
548#### dm.mkfsarg
549
550Specifies extra mkfs arguments to be used when creating the base device.
551
552Example use: `dockerd --storage-opt "dm.mkfsarg=-O ^has_journal"`
553
554#### dm.mountopt
555
556Specifies extra mount options used when mounting the thin devices.
557
558Example use: `dockerd --storage-opt dm.mountopt=nodiscard`
559
560#### dm.use_deferred_removal
561
562Enables use of deferred device removal if `libdm` and the kernel driver
563support the mechanism.
564
565Deferred device removal means that if device is busy when devices are
566being removed/deactivated, then a deferred removal is scheduled on
567device. And devices automatically go away when last user of the device
568exits.
569
570For example, when a container exits, its associated thin device is removed. If
571that device has leaked into some other mount namespace and can't be removed,
572the container exit still succeeds and this option causes the system to schedule
573the device for deferred removal. It does not wait in a loop trying to remove a
574busy device.
575
576Example use: `dockerd --storage-opt dm.use_deferred_removal=true`
577
578#### dm.use_deferred_deletion
579
580Enables use of deferred device deletion for thin pool devices. By default,
581thin pool device deletion is synchronous. Before a container is deleted, the
582Docker daemon removes any associated devices. If the storage driver can not
583remove a device, the container deletion fails and daemon returns.
584
585`Error deleting container: Error response from daemon: Cannot destroy container`
586
587To avoid this failure, enable both deferred device deletion and deferred
588device removal on the daemon.
589
590`dockerd --storage-opt dm.use_deferred_deletion=true --storage-opt dm.use_deferred_removal=true`
591
592With these two options enabled, if a device is busy when the driver is
593deleting a container, the driver marks the device as deleted. Later, when the
594device isn't in use, the driver deletes it.
595
596In general it should be safe to enable this option by default. It will help
597when unintentional leaking of mount point happens across multiple mount
598namespaces.
599
600#### dm.loopdatasize
601
602**Note**: This option configures devicemapper loopback, which should not be
603used in production.
604
605Specifies the size to use when creating the loopback file for the "data" device
606which is used for the thin pool. The default size is 100G. The file is sparse,
607so it will not initially take up this much space.
608
609Example use: `dockerd --storage-opt dm.loopdatasize=200G`
610
611#### dm.loopmetadatasize
612
613**Note**: This option configures devicemapper loopback, which should not be
614used in production.
615
616Specifies the size to use when creating the loopback file for the "metadata"
617device which is used for the thin pool. The default size is 2G. The file is
618sparse, so it will not initially take up this much space.
619
620Example use: `dockerd --storage-opt dm.loopmetadatasize=4G`
621
622#### dm.datadev
623
624(Deprecated, use `dm.thinpooldev`)
625
626Specifies a custom blockdevice to use for data for a Docker-managed thin pool.
627It is better to use `dm.thinpooldev` - see the documentation for it above for
628discussion of the advantages.
629
630#### dm.metadatadev
631
632(Deprecated, use `dm.thinpooldev`)
633
634Specifies a custom blockdevice to use for metadata for a Docker-managed thin
635pool.  See `dm.datadev` for why this is deprecated.
636
637#### dm.blocksize
638
639Specifies a custom blocksize to use for the thin pool.  The default
640blocksize is 64K.
641
642Example use: `dockerd --storage-opt dm.blocksize=512K`
643
644#### dm.blkdiscard
645
646Enables or disables the use of `blkdiscard` when removing devicemapper devices.
647This is disabled by default due to the additional latency, but as a special
648case with loopback devices it will be enabled, in order to re-sparsify the
649loopback file on image/container removal.
650
651Disabling this on loopback can lead to *much* faster container removal times,
652but it also prevents the space used in `/var/lib/docker` directory from being
653returned to the system for other use when containers are removed.
654
655Example use: `dockerd --storage-opt dm.blkdiscard=false`
656
657#### dm.override_udev_sync_check
658
659By default, the devicemapper backend attempts to synchronize with the `udev`
660device manager for the Linux kernel.  This option allows disabling that
661synchronization, to continue even though the configuration may be buggy.
662
663To view the `udev` sync support of a Docker daemon that is using the
664`devicemapper` driver, run:
665
666        $ docker info
667        [...]
668         Udev Sync Supported: true
669        [...]
670
671When `udev` sync support is `true`, then `devicemapper` and `udev` can
672coordinate the activation and deactivation of devices for containers.
673
674When `udev` sync support is `false`, a race condition occurs between the
675`devicemapper` and `udev` during create and cleanup. The race condition results
676in errors and failures. (For information on these failures, see
677[docker#4036](https://github.com/docker/docker/issues/4036))
678
679To allow the `docker` daemon to start, regardless of whether `udev` sync is
680`false`, set `dm.override_udev_sync_check` to true:
681
682        $ dockerd --storage-opt dm.override_udev_sync_check=true
683
684When this value is `true`, the driver continues and simply warns you the errors
685are happening.
686
687**Note**: The ideal is to pursue a `docker` daemon and environment that does
688support synchronizing with `udev`. For further discussion on this topic, see
689[docker#4036](https://github.com/docker/docker/issues/4036).
690Otherwise, set this flag for migrating existing Docker daemons to a daemon with
691a supported environment.
692
693#### dm.min_free_space
694
695Specifies the min free space percent in a thin pool require for new device
696creation to succeed. This check applies to both free data space as well
697as free metadata space. Valid values are from 0% - 99%. Value 0% disables
698free space checking logic. If user does not specify a value for this option,
699the Engine uses a default value of 10%.
700
701Whenever a new a thin pool device is created (during `docker pull` or during
702container creation), the Engine checks if the minimum free space is available.
703If the space is unavailable, then device creation fails and any relevant
704`docker` operation fails.
705
706To recover from this error, you must create more free space in the thin pool to
707recover from the error. You can create free space by deleting some images and
708containers from tge thin pool. You can also add more storage to the thin pool.
709
710To add more space to an LVM (logical volume management) thin pool, just add
711more storage to the  group container thin pool; this should automatically
712resolve any errors. If your configuration uses loop devices, then stop the
713Engine daemon, grow the size of loop files and restart the daemon to resolve
714the issue.
715
716Example use:: `dockerd --storage-opt dm.min_free_space=10%`
717
718#### dm.xfs_nospace_max_retries
719
720Specifies the maximum number of retries XFS should attempt to complete IO when
721ENOSPC (no space) error is returned by underlying storage device.
722
723By default XFS retries infinitely for IO to finish and this can result in
724unkillable process. To change this behavior one can set xfs_nospace_max_retries
725to say 0 and XFS will not retry IO after getting ENOSPC and will shutdown
726filesystem.
727
728Example use:
729
730    $ sudo dockerd --storage-opt dm.xfs_nospace_max_retries=0
731
732##### dm.libdm_log_level
733
734Specifies the maxmimum libdm log level that will be forwarded to the dockerd
735log (as specified by --log-level). This option is primarily intended for
736debugging problems involving libdm. Using values other than the defaults may
737cause false-positive warnings to be logged.
738
739Values specified must fall within the range of valid libdm log levels. At the
740time of writing, the following is the list of libdm log levels as well as their
741corresponding levels when output by dockerd.
742
743| libdm Level | Value | --log-level |
744| ----------- | -----:| ----------- |
745| _LOG_FATAL  |     2 | error       |
746| _LOG_ERR    |     3 | error       |
747| _LOG_WARN   |     4 | warn        |
748| _LOG_NOTICE |     5 | info        |
749| _LOG_INFO   |     6 | info        |
750| _LOG_DEBUG  |     7 | debug       |
751
752Example use:
753
754    $ sudo dockerd \
755	      --log-level debug \
756          --storage-opt dm.libdm_log_level=7
757
758## ZFS options
759
760#### zfs.fsname
761
762Set zfs filesystem under which docker will create its own datasets.  By default
763docker will pick up the zfs filesystem where docker graph (`/var/lib/docker`)
764is located.
765
766Example use: `dockerd -s zfs --storage-opt zfs.fsname=zroot/docker`
767
768## Btrfs options
769
770#### btrfs.min_space
771
772Specifies the minimum size to use when creating the subvolume which is used for
773containers. If user uses disk quota for btrfs when creating or running a
774container with **--storage-opt size** option, docker should ensure the **size**
775cannot be smaller than **btrfs.min_space**.
776
777Example use: `docker daemon -s btrfs --storage-opt btrfs.min_space=10G`
778
779# CLUSTER STORE OPTIONS
780
781The daemon uses libkv to advertise the node within the cluster.  Some Key/Value
782backends support mutual TLS, and the client TLS settings used by the daemon can
783be configured using the **--cluster-store-opt** flag, specifying the paths to
784PEM encoded files.
785
786#### kv.cacertfile
787
788Specifies the path to a local file with PEM encoded CA certificates to trust
789
790#### kv.certfile
791
792Specifies the path to a local file with a PEM encoded certificate.  This
793certificate is used as the client cert for communication with the Key/Value
794store.
795
796#### kv.keyfile
797
798Specifies the path to a local file with a PEM encoded private key.  This
799private key is used as the client key for communication with the Key/Value
800store.
801
802# Access authorization
803
804Docker's access authorization can be extended by authorization plugins that
805your organization can purchase or build themselves. You can install one or more
806authorization plugins when you start the Docker `daemon` using the
807`--authorization-plugin=PLUGIN_ID` option.
808
809```bash
810dockerd --authorization-plugin=plugin1 --authorization-plugin=plugin2,...
811```
812
813The `PLUGIN_ID` value is either the plugin's name or a path to its
814specification file. The plugin's implementation determines whether you can
815specify a name or path. Consult with your Docker administrator to get
816information about the plugins available to you.
817
818Once a plugin is installed, requests made to the `daemon` through the
819command line or Docker's Engine API are allowed or denied by the plugin.
820If you have multiple plugins installed, each plugin, in order, must
821allow the request for it to complete.
822
823For information about how to create an authorization plugin, see [access authorization
824plugin](https://docs.docker.com/engine/extend/plugins_authorization/) section in the
825Docker extend section of this documentation.
826
827# RUNTIME EXECUTION OPTIONS
828
829You can configure the runtime using options specified with the `--exec-opt` flag.
830All the flag's options have the `native` prefix. A single `native.cgroupdriver`
831option is available.
832
833The `native.cgroupdriver` option specifies the management of the container's
834cgroups. You can only specify `cgroupfs` or `systemd`. If you specify
835`systemd` and it is not available, the system errors out. If you omit the
836`native.cgroupdriver` option,` cgroupfs` is used on cgroup v1 hosts, `systemd`
837is used on cgroup v2 hosts with systemd available.
838
839This example sets the `cgroupdriver` to `systemd`:
840
841```bash
842$ sudo dockerd --exec-opt native.cgroupdriver=systemd
843```
844
845Setting this option applies to all containers the daemon launches.
846
847# HISTORY
848Sept 2015, Originally compiled by Shishir Mahajan <shishir.mahajan@redhat.com>
849based on docker.com source material and internal work.
850