github.com/sijibomii/docker@v0.0.0-20231230191044-5cf6ca554647/docs/reference/commandline/daemon.md (about)

     1  <!--[metadata]>
     2  +++
     3  title = "daemon"
     4  description = "The daemon command description and usage"
     5  keywords = ["container, daemon, runtime"]
     6  [menu.main]
     7  parent = "smn_cli"
     8  weight = -1
     9  +++
    10  <![end-metadata]-->
    11  
    12  # daemon
    13  
    14      Usage: docker daemon [OPTIONS]
    15  
    16      A self-sufficient runtime for linux containers.
    17  
    18      Options:
    19        --api-cors-header=""                   Set CORS headers in the remote API
    20        --authorization-plugin=[]              Set authorization plugins to load
    21        -b, --bridge=""                        Attach containers to a network bridge
    22        --bip=""                               Specify network bridge IP
    23        --cgroup-parent=                       Set parent cgroup for all containers
    24        --cluster-store=""                     URL of the distributed storage backend
    25        --cluster-advertise=""                 Address of the daemon instance on the cluster
    26        --cluster-store-opt=map[]              Set cluster options
    27        --config-file=/etc/docker/daemon.json  Daemon configuration file
    28        --containerd                           Path to containerd socket
    29        -D, --debug                            Enable debug mode
    30        --default-gateway=""                   Container default gateway IPv4 address
    31        --default-gateway-v6=""                Container default gateway IPv6 address
    32        --dns=[]                               DNS server to use
    33        --dns-opt=[]                           DNS options to use
    34        --dns-search=[]                        DNS search domains to use
    35        --default-ulimit=[]                    Set default ulimit settings for containers
    36        --exec-opt=[]                          Set runtime execution options
    37        --exec-root="/var/run/docker"          Root directory for execution state files
    38        --fixed-cidr=""                        IPv4 subnet for fixed IPs
    39        --fixed-cidr-v6=""                     IPv6 subnet for fixed IPs
    40        -G, --group="docker"                   Group for the unix socket
    41        -g, --graph="/var/lib/docker"          Root of the Docker runtime
    42        -H, --host=[]                          Daemon socket(s) to connect to
    43        --help                                 Print usage
    44        --icc=true                             Enable inter-container communication
    45        --insecure-registry=[]                 Enable insecure registry communication
    46        --ip=0.0.0.0                           Default IP when binding container ports
    47        --ip-forward=true                      Enable net.ipv4.ip_forward
    48        --ip-masq=true                         Enable IP masquerading
    49        --iptables=true                        Enable addition of iptables rules
    50        --ipv6                                 Enable IPv6 networking
    51        -l, --log-level="info"                 Set the logging level
    52        --label=[]                             Set key=value labels to the daemon
    53        --log-driver="json-file"               Default driver for container logs
    54        --log-opt=[]                           Log driver specific options
    55        --mtu=0                                Set the containers network MTU
    56        --disable-legacy-registry              Do not contact legacy registries
    57        -p, --pidfile="/var/run/docker.pid"    Path to use for daemon PID file
    58        --raw-logs                             Full timestamps without ANSI coloring
    59        --registry-mirror=[]                   Preferred Docker registry mirror
    60        -s, --storage-driver=""                Storage driver to use
    61        --selinux-enabled                      Enable selinux support
    62        --storage-opt=[]                       Set storage driver options
    63        --tls                                  Use TLS; implied by --tlsverify
    64        --tlscacert="~/.docker/ca.pem"         Trust certs signed only by this CA
    65        --tlscert="~/.docker/cert.pem"         Path to TLS certificate file
    66        --tlskey="~/.docker/key.pem"           Path to TLS key file
    67        --tlsverify                            Use TLS and verify the remote
    68        --userns-remap="default"               Enable user namespace remapping
    69        --userland-proxy=true                  Use userland proxy for loopback traffic
    70  
    71  Options with [] may be specified multiple times.
    72  
    73  The Docker daemon is the persistent process that manages containers. Docker
    74  uses the same binary for both the daemon and client. To run the daemon you
    75  type `docker daemon`.
    76  
    77  To run the daemon with debug output, use `docker daemon -D`.
    78  
    79  ## Daemon socket option
    80  
    81  The Docker daemon can listen for [Docker Remote API](../api/docker_remote_api.md)
    82  requests via three different types of Socket: `unix`, `tcp`, and `fd`.
    83  
    84  By default, a `unix` domain socket (or IPC socket) is created at
    85  `/var/run/docker.sock`, requiring either `root` permission, or `docker` group
    86  membership.
    87  
    88  If you need to access the Docker daemon remotely, you need to enable the `tcp`
    89  Socket. Beware that the default setup provides un-encrypted and
    90  un-authenticated direct access to the Docker daemon - and should be secured
    91  either using the [built in HTTPS encrypted socket](../../security/https/), or by
    92  putting a secure web proxy in front of it. You can listen on port `2375` on all
    93  network interfaces with `-H tcp://0.0.0.0:2375`, or on a particular network
    94  interface using its IP address: `-H tcp://192.168.59.103:2375`. It is
    95  conventional to use port `2375` for un-encrypted, and port `2376` for encrypted
    96  communication with the daemon.
    97  
    98  > **Note:**
    99  > If you're using an HTTPS encrypted socket, keep in mind that only
   100  > TLS1.0 and greater are supported. Protocols SSLv3 and under are not
   101  > supported anymore for security reasons.
   102  
   103  On Systemd based systems, you can communicate with the daemon via
   104  [Systemd socket activation](http://0pointer.de/blog/projects/socket-activation.html),
   105  use `docker daemon -H fd://`. Using `fd://` will work perfectly for most setups but
   106  you can also specify individual sockets: `docker daemon -H fd://3`. If the
   107  specified socket activated files aren't found, then Docker will exit. You can
   108  find examples of using Systemd socket activation with Docker and Systemd in the
   109  [Docker source tree](https://github.com/docker/docker/tree/master/contrib/init/systemd/).
   110  
   111  You can configure the Docker daemon to listen to multiple sockets at the same
   112  time using multiple `-H` options:
   113  
   114      # listen using the default unix socket, and on 2 specific IP addresses on this host.
   115      docker daemon -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2
   116  
   117  The Docker client will honor the `DOCKER_HOST` environment variable to set the
   118  `-H` flag for the client.
   119  
   120      $ docker -H tcp://0.0.0.0:2375 ps
   121      # or
   122      $ export DOCKER_HOST="tcp://0.0.0.0:2375"
   123      $ docker ps
   124      # both are equal
   125  
   126  Setting the `DOCKER_TLS_VERIFY` environment variable to any value other than
   127  the empty string is equivalent to setting the `--tlsverify` flag. The following
   128  are equivalent:
   129  
   130      $ docker --tlsverify ps
   131      # or
   132      $ export DOCKER_TLS_VERIFY=1
   133      $ docker ps
   134  
   135  The Docker client will honor the `HTTP_PROXY`, `HTTPS_PROXY`, and `NO_PROXY`
   136  environment variables (or the lowercase versions thereof). `HTTPS_PROXY` takes
   137  precedence over `HTTP_PROXY`.
   138  
   139  ### Daemon storage-driver option
   140  
   141  The Docker daemon has support for several different image layer storage
   142  drivers: `aufs`, `devicemapper`, `btrfs`, `zfs` and `overlay`.
   143  
   144  The `aufs` driver is the oldest, but is based on a Linux kernel patch-set that
   145  is unlikely to be merged into the main kernel. These are also known to cause
   146  some serious kernel crashes. However, `aufs` is also the only storage driver
   147  that allows containers to share executable and shared library memory, so is a
   148  useful choice when running thousands of containers with the same program or
   149  libraries.
   150  
   151  The `devicemapper` driver uses thin provisioning and Copy on Write (CoW)
   152  snapshots. For each devicemapper graph location – typically
   153  `/var/lib/docker/devicemapper` – a thin pool is created based on two block
   154  devices, one for data and one for metadata. By default, these block devices
   155  are created automatically by using loopback mounts of automatically created
   156  sparse files. Refer to [Storage driver options](#storage-driver-options) below
   157  for a way how to customize this setup.
   158  [~jpetazzo/Resizing Docker containers with the Device Mapper plugin](http://jpetazzo.github.io/2014/01/29/docker-device-mapper-resize/)
   159  article explains how to tune your existing setup without the use of options.
   160  
   161  The `btrfs` driver is very fast for `docker build` - but like `devicemapper`
   162  does not share executable memory between devices. Use
   163  `docker daemon -s btrfs -g /mnt/btrfs_partition`.
   164  
   165  The `zfs` driver is probably not as fast as `btrfs` but has a longer track record
   166  on stability. Thanks to `Single Copy ARC` shared blocks between clones will be
   167  cached only once. Use `docker daemon -s zfs`. To select a different zfs filesystem
   168  set `zfs.fsname` option as described in [Storage driver options](#storage-driver-options).
   169  
   170  The `overlay` is a very fast union filesystem. It is now merged in the main
   171  Linux kernel as of [3.18.0](https://lkml.org/lkml/2014/10/26/137). Call
   172  `docker daemon -s overlay` to use it.
   173  
   174  > **Note:**
   175  > As promising as `overlay` is, the feature is still quite young and should not
   176  > be used in production. Most notably, using `overlay` can cause excessive
   177  > inode consumption (especially as the number of images grows), as well as
   178  > being incompatible with the use of RPMs.
   179  
   180  > **Note:**
   181  > It is currently unsupported on `btrfs` or any Copy on Write filesystem
   182  > and should only be used over `ext4` partitions.
   183  
   184  ### Storage driver options
   185  
   186  Particular storage-driver can be configured with options specified with
   187  `--storage-opt` flags. Options for `devicemapper` are prefixed with `dm` and
   188  options for `zfs` start with `zfs`.
   189  
   190  *  `dm.thinpooldev`
   191  
   192       Specifies a custom block storage device to use for the thin pool.
   193  
   194       If using a block device for device mapper storage, it is best to use `lvm`
   195       to create and manage the thin-pool volume. This volume is then handed to Docker
   196       to exclusively create snapshot volumes needed for images and containers.
   197  
   198       Managing the thin-pool outside of Engine makes for the most feature-rich
   199       method of having Docker utilize device mapper thin provisioning as the
   200       backing storage for Docker containers. The highlights of the lvm-based
   201       thin-pool management feature include: automatic or interactive thin-pool
   202       resize support, dynamically changing thin-pool features, automatic thinp
   203       metadata checking when lvm activates the thin-pool, etc.
   204  
   205       As a fallback if no thin pool is provided, loopback files are
   206       created. Loopback is very slow, but can be used without any
   207       pre-configuration of storage. It is strongly recommended that you do
   208       not use loopback in production. Ensure your Engine daemon has a
   209       `--storage-opt dm.thinpooldev` argument provided.
   210  
   211       Example use:
   212  
   213          $ docker daemon \
   214                --storage-opt dm.thinpooldev=/dev/mapper/thin-pool
   215  
   216  *  `dm.basesize`
   217  
   218      Specifies the size to use when creating the base device, which limits the
   219      size of images and containers. The default value is 10G. Note, thin devices
   220      are inherently "sparse", so a 10G device which is mostly empty doesn't use
   221      10 GB of space on the pool. However, the filesystem will use more space for
   222      the empty case the larger the device is.
   223  
   224      The base device size can be increased at daemon restart which will allow
   225      all future images and containers (based on those new images) to be of the
   226      new base device size.
   227  
   228      Example use:
   229  
   230          $ docker daemon --storage-opt dm.basesize=50G
   231  
   232      This will increase the base device size to 50G. The Docker daemon will throw an
   233      error if existing base device size is larger than 50G. A user can use
   234      this option to expand the base device size however shrinking is not permitted.
   235  
   236      This value affects the system-wide "base" empty filesystem
   237      that may already be initialized and inherited by pulled images. Typically,
   238      a change to this value requires additional steps to take effect:
   239  
   240          $ sudo service docker stop
   241          $ sudo rm -rf /var/lib/docker
   242          $ sudo service docker start
   243  
   244      Example use:
   245  
   246          $ docker daemon --storage-opt dm.basesize=20G
   247  
   248  *  `dm.loopdatasize`
   249  
   250      > **Note**:
   251  	> This option configures devicemapper loopback, which should not
   252  	> be used in production.
   253  
   254      Specifies the size to use when creating the loopback file for the
   255      "data" device which is used for the thin pool. The default size is
   256      100G. The file is sparse, so it will not initially take up this
   257      much space.
   258  
   259      Example use:
   260  
   261          $ docker daemon --storage-opt dm.loopdatasize=200G
   262  
   263  *  `dm.loopmetadatasize`
   264  
   265      > **Note**:
   266      > This option configures devicemapper loopback, which should not
   267      > be used in production.
   268  
   269      Specifies the size to use when creating the loopback file for the
   270      "metadata" device which is used for the thin pool. The default size
   271      is 2G. The file is sparse, so it will not initially take up
   272      this much space.
   273  
   274      Example use:
   275  
   276          $ docker daemon --storage-opt dm.loopmetadatasize=4G
   277  
   278  *  `dm.fs`
   279  
   280      Specifies the filesystem type to use for the base device. The supported
   281      options are "ext4" and "xfs". The default is "xfs"
   282  
   283      Example use:
   284  
   285          $ docker daemon --storage-opt dm.fs=ext4
   286  
   287  *  `dm.mkfsarg`
   288  
   289      Specifies extra mkfs arguments to be used when creating the base device.
   290  
   291      Example use:
   292  
   293          $ docker daemon --storage-opt "dm.mkfsarg=-O ^has_journal"
   294  
   295  *  `dm.mountopt`
   296  
   297      Specifies extra mount options used when mounting the thin devices.
   298  
   299      Example use:
   300  
   301          $ docker daemon --storage-opt dm.mountopt=nodiscard
   302  
   303  *  `dm.datadev`
   304  
   305      (Deprecated, use `dm.thinpooldev`)
   306  
   307      Specifies a custom blockdevice to use for data for the thin pool.
   308  
   309      If using a block device for device mapper storage, ideally both datadev and
   310      metadatadev should be specified to completely avoid using the loopback
   311      device.
   312  
   313      Example use:
   314  
   315          $ docker daemon \
   316                --storage-opt dm.datadev=/dev/sdb1 \
   317                --storage-opt dm.metadatadev=/dev/sdc1
   318  
   319  *  `dm.metadatadev`
   320  
   321      (Deprecated, use `dm.thinpooldev`)
   322  
   323      Specifies a custom blockdevice to use for metadata for the thin pool.
   324  
   325      For best performance the metadata should be on a different spindle than the
   326      data, or even better on an SSD.
   327  
   328      If setting up a new metadata pool it is required to be valid. This can be
   329      achieved by zeroing the first 4k to indicate empty metadata, like this:
   330  
   331          $ dd if=/dev/zero of=$metadata_dev bs=4096 count=1
   332  
   333      Example use:
   334  
   335          $ docker daemon \
   336                --storage-opt dm.datadev=/dev/sdb1 \
   337                --storage-opt dm.metadatadev=/dev/sdc1
   338  
   339  *  `dm.blocksize`
   340  
   341      Specifies a custom blocksize to use for the thin pool. The default
   342      blocksize is 64K.
   343  
   344      Example use:
   345  
   346          $ docker daemon --storage-opt dm.blocksize=512K
   347  
   348  *  `dm.blkdiscard`
   349  
   350      Enables or disables the use of blkdiscard when removing devicemapper
   351      devices. This is enabled by default (only) if using loopback devices and is
   352      required to resparsify the loopback file on image/container removal.
   353  
   354      Disabling this on loopback can lead to *much* faster container removal
   355      times, but will make the space used in `/var/lib/docker` directory not be
   356      returned to the system for other use when containers are removed.
   357  
   358      Example use:
   359  
   360          $ docker daemon --storage-opt dm.blkdiscard=false
   361  
   362  *  `dm.override_udev_sync_check`
   363  
   364      Overrides the `udev` synchronization checks between `devicemapper` and `udev`.
   365      `udev` is the device manager for the Linux kernel.
   366  
   367      To view the `udev` sync support of a Docker daemon that is using the
   368      `devicemapper` driver, run:
   369  
   370          $ docker info
   371          [...]
   372          Udev Sync Supported: true
   373          [...]
   374  
   375      When `udev` sync support is `true`, then `devicemapper` and udev can
   376      coordinate the activation and deactivation of devices for containers.
   377  
   378      When `udev` sync support is `false`, a race condition occurs between
   379      the`devicemapper` and `udev` during create and cleanup. The race condition
   380      results in errors and failures. (For information on these failures, see
   381      [docker#4036](https://github.com/docker/docker/issues/4036))
   382  
   383      To allow the `docker` daemon to start, regardless of `udev` sync not being
   384      supported, set `dm.override_udev_sync_check` to true:
   385  
   386          $ docker daemon --storage-opt dm.override_udev_sync_check=true
   387  
   388      When this value is `true`, the  `devicemapper` continues and simply warns
   389      you the errors are happening.
   390  
   391      > **Note:**
   392      > The ideal is to pursue a `docker` daemon and environment that does
   393      > support synchronizing with `udev`. For further discussion on this
   394      > topic, see [docker#4036](https://github.com/docker/docker/issues/4036).
   395      > Otherwise, set this flag for migrating existing Docker daemons to
   396      > a daemon with a supported environment.
   397  
   398  *  `dm.use_deferred_removal`
   399  
   400      Enables use of deferred device removal if `libdm` and the kernel driver
   401      support the mechanism.
   402  
   403      Deferred device removal means that if device is busy when devices are
   404      being removed/deactivated, then a deferred removal is scheduled on
   405      device. And devices automatically go away when last user of the device
   406      exits.
   407  
   408      For example, when a container exits, its associated thin device is removed.
   409      If that device has leaked into some other mount namespace and can't be
   410      removed, the container exit still succeeds and this option causes the
   411      system to schedule the device for deferred removal. It does not wait in a
   412      loop trying to remove a busy device.
   413  
   414      Example use:
   415  
   416          $ docker daemon --storage-opt dm.use_deferred_removal=true
   417  
   418  *  `dm.use_deferred_deletion`
   419  
   420      Enables use of deferred device deletion for thin pool devices. By default,
   421      thin pool device deletion is synchronous. Before a container is deleted,
   422      the Docker daemon removes any associated devices. If the storage driver
   423      can not remove a device, the container deletion fails and daemon returns.
   424  
   425          Error deleting container: Error response from daemon: Cannot destroy container
   426  
   427      To avoid this failure, enable both deferred device deletion and deferred
   428      device removal on the daemon.
   429  
   430          $ docker daemon \
   431                --storage-opt dm.use_deferred_deletion=true \
   432                --storage-opt dm.use_deferred_removal=true
   433  
   434      With these two options enabled, if a device is busy when the driver is
   435      deleting a container, the driver marks the device as deleted. Later, when
   436      the device isn't in use, the driver deletes it.
   437  
   438      In general it should be safe to enable this option by default. It will help
   439      when unintentional leaking of mount point happens across multiple mount
   440      namespaces.
   441  
   442  *  `dm.min_free_space`
   443  
   444      Specifies the min free space percent in a thin pool require for new device
   445      creation to succeed. This check applies to both free data space as well
   446      as free metadata space. Valid values are from 0% - 99%. Value 0% disables
   447      free space checking logic. If user does not specify a value for this option,
   448      the Engine uses a default value of 10%.
   449  
   450      Whenever a new a thin pool device is created (during `docker pull` or during
   451      container creation), the Engine checks if the minimum free space is
   452      available. If sufficient space is unavailable, then device creation fails
   453      and any relevant `docker` operation fails.
   454  
   455      To recover from this error, you must create more free space in the thin pool
   456      to recover from the error. You can create free space by deleting some images
   457      and containers from the thin pool. You can also add more storage to the thin
   458      pool.
   459  
   460      To add more space to a LVM (logical volume management) thin pool, just add
   461      more storage to the volume group container thin pool; this should automatically
   462      resolve any errors. If your configuration uses loop devices, then stop the
   463      Engine daemon, grow the size of loop files and restart the daemon to resolve
   464      the issue.
   465  
   466      Example use:
   467  
   468      ```bash
   469      $ docker daemon --storage-opt dm.min_free_space=10%
   470      ```
   471  
   472  Currently supported options of `zfs`:
   473  
   474  * `zfs.fsname`
   475  
   476      Set zfs filesystem under which docker will create its own datasets.
   477      By default docker will pick up the zfs filesystem where docker graph
   478      (`/var/lib/docker`) is located.
   479  
   480      Example use:
   481  
   482          $ docker daemon -s zfs --storage-opt zfs.fsname=zroot/docker
   483  
   484  ## Docker runtime execution options
   485  
   486  The Docker daemon relies on a
   487  [OCI](https://github.com/opencontainers/specs) compliant runtime
   488  (invoked via the `containerd` daemon) as its interface to the Linux
   489  kernel `namespaces`, `cgroups`, and `SELinux`.
   490  
   491  ## Options for the runtime
   492  
   493  You can configure the runtime using options specified
   494  with the `--exec-opt` flag. All the flag's options have the `native` prefix. A
   495  single `native.cgroupdriver` option is available.
   496  
   497  The `native.cgroupdriver` option specifies the management of the container's
   498  cgroups. You can specify only specify `cgroupfs` or `systemd`. If you specify
   499  `systemd` and it is not available, the system errors out. If you omit the
   500  `native.cgroupdriver` option,` cgroupfs` is used.
   501  
   502  This example sets the `cgroupdriver` to `systemd`:
   503  
   504      $ sudo docker daemon --exec-opt native.cgroupdriver=systemd
   505  
   506  Setting this option applies to all containers the daemon launches.
   507  
   508  Also Windows Container makes use of `--exec-opt` for special purpose. Docker user
   509  can specify default container isolation technology with this, for example:
   510  
   511      $ docker daemon --exec-opt isolation=hyperv
   512  
   513  Will make `hyperv` the default isolation technology on Windows, without specifying
   514  isolation value on daemon start, Windows isolation technology will default to `process`.
   515  
   516  ## Daemon DNS options
   517  
   518  To set the DNS server for all Docker containers, use
   519  `docker daemon --dns 8.8.8.8`.
   520  
   521  To set the DNS search domain for all Docker containers, use
   522  `docker daemon --dns-search example.com`.
   523  
   524  ## Insecure registries
   525  
   526  Docker considers a private registry either secure or insecure. In the rest of
   527  this section, *registry* is used for *private registry*, and `myregistry:5000`
   528  is a placeholder example for a private registry.
   529  
   530  A secure registry uses TLS and a copy of its CA certificate is placed on the
   531  Docker host at `/etc/docker/certs.d/myregistry:5000/ca.crt`. An insecure
   532  registry is either not using TLS (i.e., listening on plain text HTTP), or is
   533  using TLS with a CA certificate not known by the Docker daemon. The latter can
   534  happen when the certificate was not found under
   535  `/etc/docker/certs.d/myregistry:5000/`, or if the certificate verification
   536  failed (i.e., wrong CA).
   537  
   538  By default, Docker assumes all, but local (see local registries below),
   539  registries are secure. Communicating with an insecure registry is not possible
   540  if Docker assumes that registry is secure. In order to communicate with an
   541  insecure registry, the Docker daemon requires `--insecure-registry` in one of
   542  the following two forms:
   543  
   544  * `--insecure-registry myregistry:5000` tells the Docker daemon that
   545    myregistry:5000 should be considered insecure.
   546  * `--insecure-registry 10.1.0.0/16` tells the Docker daemon that all registries
   547    whose domain resolve to an IP address is part of the subnet described by the
   548    CIDR syntax, should be considered insecure.
   549  
   550  The flag can be used multiple times to allow multiple registries to be marked
   551  as insecure.
   552  
   553  If an insecure registry is not marked as insecure, `docker pull`,
   554  `docker push`, and `docker search` will result in an error message prompting
   555  the user to either secure or pass the `--insecure-registry` flag to the Docker
   556  daemon as described above.
   557  
   558  Local registries, whose IP address falls in the 127.0.0.0/8 range, are
   559  automatically marked as insecure as of Docker 1.3.2. It is not recommended to
   560  rely on this, as it may change in the future.
   561  
   562  Enabling `--insecure-registry`, i.e., allowing un-encrypted and/or untrusted
   563  communication, can be useful when running a local registry.  However,
   564  because its use creates security vulnerabilities it should ONLY be enabled for
   565  testing purposes.  For increased security, users should add their CA to their
   566  system's list of trusted CAs instead of enabling `--insecure-registry`.
   567  
   568  ## Legacy Registries
   569  
   570  Enabling `--disable-legacy-registry` forces a docker daemon to only interact with registries which support the V2 protocol.  Specifically, the daemon will not attempt `push`, `pull` and `login` to v1 registries.  The exception to this is `search` which can still be performed on v1 registries.
   571  
   572  ## Running a Docker daemon behind a HTTPS_PROXY
   573  
   574  When running inside a LAN that uses a `HTTPS` proxy, the Docker Hub
   575  certificates will be replaced by the proxy's certificates. These certificates
   576  need to be added to your Docker host's configuration:
   577  
   578  1. Install the `ca-certificates` package for your distribution
   579  2. Ask your network admin for the proxy's CA certificate and append them to
   580     `/etc/pki/tls/certs/ca-bundle.crt`
   581  3. Then start your Docker daemon with `HTTPS_PROXY=http://username:password@proxy:port/ docker daemon`.
   582     The `username:` and `password@` are optional - and are only needed if your
   583     proxy is set up to require authentication.
   584  
   585  This will only add the proxy and authentication to the Docker daemon's requests -
   586  your `docker build`s and running containers will need extra configuration to
   587  use the proxy
   588  
   589  ## Default Ulimits
   590  
   591  `--default-ulimit` allows you to set the default `ulimit` options to use for
   592  all containers. It takes the same options as `--ulimit` for `docker run`. If
   593  these defaults are not set, `ulimit` settings will be inherited, if not set on
   594  `docker run`, from the Docker daemon. Any `--ulimit` options passed to
   595  `docker run` will overwrite these defaults.
   596  
   597  Be careful setting `nproc` with the `ulimit` flag as `nproc` is designed by Linux to
   598  set the maximum number of processes available to a user, not to a container. For details
   599  please check the [run](run.md) reference.
   600  
   601  ## Nodes discovery
   602  
   603  The `--cluster-advertise` option specifies the `host:port` or `interface:port`
   604  combination that this particular daemon instance should use when advertising
   605  itself to the cluster. The daemon is reached by remote hosts through this value.
   606  If you  specify an interface, make sure it includes the IP address of the actual
   607  Docker host. For Engine installation created through `docker-machine`, the
   608  interface is typically `eth1`.
   609  
   610  The daemon uses [libkv](https://github.com/docker/libkv/) to advertise
   611  the node within the cluster. Some key-value backends support mutual
   612  TLS. To configure the client TLS settings used by the daemon can be configured
   613  using the `--cluster-store-opt` flag, specifying the paths to PEM encoded
   614  files. For example:
   615  
   616  ```bash
   617  docker daemon \
   618      --cluster-advertise 192.168.1.2:2376 \
   619      --cluster-store etcd://192.168.1.2:2379 \
   620      --cluster-store-opt kv.cacertfile=/path/to/ca.pem \
   621      --cluster-store-opt kv.certfile=/path/to/cert.pem \
   622      --cluster-store-opt kv.keyfile=/path/to/key.pem
   623  ```
   624  
   625  The currently supported cluster store options are:
   626  
   627  *  `discovery.heartbeat`
   628  
   629      Specifies the heartbeat timer in seconds which is used by the daemon as a
   630      keepalive mechanism to make sure discovery module treats the node as alive
   631      in the cluster. If not configured, the default value is 20 seconds.
   632  
   633  *  `discovery.ttl`
   634  
   635      Specifies the ttl (time-to-live) in seconds which is used by the discovery
   636      module to timeout a node if a valid heartbeat is not received within the
   637      configured ttl value. If not configured, the default value is 60 seconds.
   638  
   639  *  `kv.cacertfile`
   640  
   641      Specifies the path to a local file with PEM encoded CA certificates to trust
   642  
   643  *  `kv.certfile`
   644  
   645      Specifies the path to a local file with a PEM encoded certificate.  This
   646      certificate is used as the client cert for communication with the
   647      Key/Value store.
   648  
   649  *  `kv.keyfile`
   650  
   651      Specifies the path to a local file with a PEM encoded private key.  This
   652      private key is used as the client key for communication with the
   653      Key/Value store.
   654  
   655  *  `kv.path`
   656  
   657      Specifies the path in the Key/Value store. If not configured, the default value is 'docker/nodes'.
   658  
   659  ## Access authorization
   660  
   661  Docker's access authorization can be extended by authorization plugins that your
   662  organization can purchase or build themselves. You can install one or more
   663  authorization plugins when you start the Docker `daemon` using the
   664  `--authorization-plugin=PLUGIN_ID` option.
   665  
   666  ```bash
   667  docker daemon --authorization-plugin=plugin1 --authorization-plugin=plugin2,...
   668  ```
   669  
   670  The `PLUGIN_ID` value is either the plugin's name or a path to its specification
   671  file. The plugin's implementation determines whether you can specify a name or
   672  path. Consult with your Docker administrator to get information about the
   673  plugins available to you.
   674  
   675  Once a plugin is installed, requests made to the `daemon` through the command
   676  line or Docker's remote API are allowed or denied by the plugin.  If you have
   677  multiple plugins installed, at least one must allow the request for it to
   678  complete.
   679  
   680  For information about how to create an authorization plugin, see [authorization
   681  plugin](../../extend/plugins_authorization.md) section in the Docker extend section of this documentation.
   682  
   683  
   684  ## Daemon user namespace options
   685  
   686  The Linux kernel [user namespace support](http://man7.org/linux/man-pages/man7/user_namespaces.7.html) provides additional security by enabling
   687  a process, and therefore a container, to have a unique range of user and
   688  group IDs which are outside the traditional user and group range utilized by
   689  the host system. Potentially the most important security improvement is that,
   690  by default, container processes running as the `root` user will have expected
   691  administrative privilege (with some restrictions) inside the container but will
   692  effectively be mapped to an unprivileged `uid` on the host.
   693  
   694  When user namespace support is enabled, Docker creates a single daemon-wide mapping
   695  for all containers running on the same engine instance. The mappings will
   696  utilize the existing subordinate user and group ID feature available on all modern
   697  Linux distributions.
   698  The [`/etc/subuid`](http://man7.org/linux/man-pages/man5/subuid.5.html) and
   699  [`/etc/subgid`](http://man7.org/linux/man-pages/man5/subgid.5.html) files will be
   700  read for the user, and optional group, specified to the `--userns-remap`
   701  parameter.  If you do not wish to specify your own user and/or group, you can
   702  provide `default` as the value to this flag, and a user will be created on your behalf
   703  and provided subordinate uid and gid ranges. This default user will be named
   704  `dockremap`, and entries will be created for it in `/etc/passwd` and
   705  `/etc/group` using your distro's standard user and group creation tools.
   706  
   707  > **Note**: The single mapping per-daemon restriction is in place for now
   708  > because Docker shares image layers from its local cache across all
   709  > containers running on the engine instance.  Since file ownership must be
   710  > the same for all containers sharing the same layer content, the decision
   711  > was made to map the file ownership on `docker pull` to the daemon's user and
   712  > group mappings so that there is no delay for running containers once the
   713  > content is downloaded. This design preserves the same performance for `docker
   714  > pull`, `docker push`, and container startup as users expect with
   715  > user namespaces disabled.
   716  
   717  ### Starting the daemon with user namespaces enabled
   718  
   719  To enable user namespace support, start the daemon with the
   720  `--userns-remap` flag, which accepts values in the following formats:
   721  
   722   - uid
   723   - uid:gid
   724   - username
   725   - username:groupname
   726  
   727  If numeric IDs are provided, translation back to valid user or group names
   728  will occur so that the subordinate uid and gid information can be read, given
   729  these resources are name-based, not id-based.  If the numeric ID information
   730  provided does not exist as entries in `/etc/passwd` or `/etc/group`, daemon
   731  startup will fail with an error message.
   732  
   733  > **Note:** On Fedora 22, you have to `touch` the `/etc/subuid` and `/etc/subgid`
   734  > files to have ranges assigned when users are created.  This must be done
   735  > *before* the `--userns-remap` option is enabled. Once these files exist, the
   736  > daemon can be (re)started and range assignment on user creation works properly.
   737  
   738  *Example: starting with default Docker user management:*
   739  
   740  ```bash
   741  $ docker daemon --userns-remap=default
   742  ```
   743  
   744  When `default` is provided, Docker will create - or find the existing - user and group
   745  named `dockremap`. If the user is created, and the Linux distribution has
   746  appropriate support, the `/etc/subuid` and `/etc/subgid` files will be populated
   747  with a contiguous 65536 length range of subordinate user and group IDs, starting
   748  at an offset based on prior entries in those files.  For example, Ubuntu will
   749  create the following range, based on an existing user named `user1` already owning
   750  the first 65536 range:
   751  
   752  ```bash
   753  $ cat /etc/subuid
   754  user1:100000:65536
   755  dockremap:165536:65536
   756  ```
   757  
   758  If you have a preferred/self-managed user with subordinate ID mappings already
   759  configured, you can provide that username or uid to the `--userns-remap` flag.
   760  If you have a group that doesn't match the username, you may provide the `gid`
   761  or group name as well; otherwise the username will be used as the group name
   762  when querying the system for the subordinate group ID range.
   763  
   764  ### Detailed information on `subuid`/`subgid` ranges
   765  
   766  Given potential advanced use of the subordinate ID ranges by power users, the
   767  following paragraphs define how the Docker daemon currently uses the range entries
   768  found within the subordinate range files.
   769  
   770  The simplest case is that only one contiguous range is defined for the
   771  provided user or group. In this case, Docker will use that entire contiguous
   772  range for the mapping of host uids and gids to the container process.  This
   773  means that the first ID in the range will be the remapped root user, and the
   774  IDs above that initial ID will map host ID 1 through the end of the range.
   775  
   776  From the example `/etc/subuid` content shown above, the remapped root
   777  user would be uid 165536.
   778  
   779  If the system administrator has set up multiple ranges for a single user or
   780  group, the Docker daemon will read all the available ranges and use the
   781  following algorithm to create the mapping ranges:
   782  
   783  1. The range segments found for the particular user will be sorted by *start ID* ascending.
   784  2. Map segments will be created from each range in increasing value with a length matching the length of each segment. Therefore the range segment with the lowest numeric starting value will be equal to the remapped root, and continue up through host uid/gid equal to the range segment length. As an example, if the lowest segment starts at ID 1000 and has a length of 100, then a map of 1000 -> 0 (the remapped root) up through 1100 -> 100 will be created from this segment. If the next segment starts at ID 10000, then the next map will start with mapping 10000 -> 101 up to the length of this second segment. This will continue until no more segments are found in the subordinate files for this user.
   785  3. If more than five range segments exist for a single user, only the first five will be utilized, matching the kernel's limitation of only five entries in `/proc/self/uid_map` and `proc/self/gid_map`.
   786  
   787  ### Disable user namespace for a container
   788  
   789  If you enable user namespaces on the daemon, all containers are started
   790  with user namespaces enabled. In some situations you might want to disable
   791  this feature for a container, for example, to start a privileged container (see
   792  [user namespace known restrictions](#user-namespace-known-restrictions)).
   793  To enable those advanced features for a specific container use `--userns=host`
   794  in the `run/exec/create` command.
   795  This option will completely disable user namespace mapping for the container's user.
   796  
   797  ### User namespace known restrictions
   798  
   799  The following standard Docker features are currently incompatible when
   800  running a Docker daemon with user namespaces enabled:
   801  
   802   - sharing PID or NET namespaces with the host (`--pid=host` or `--net=host`)
   803   - A `--readonly` container filesystem (this is a Linux kernel restriction against remounting with modified flags of a currently mounted filesystem when inside a user namespace)
   804   - external (volume or graph) drivers which are unaware/incapable of using daemon user mappings
   805   - Using `--privileged` mode flag on `docker run` (unless also specifying `--userns=host`)
   806  
   807  In general, user namespaces are an advanced feature and will require
   808  coordination with other capabilities. For example, if volumes are mounted from
   809  the host, file ownership will have to be pre-arranged if the user or
   810  administrator wishes the containers to have expected access to the volume
   811  contents.
   812  
   813  Finally, while the `root` user inside a user namespaced container process has
   814  many of the expected admin privileges that go along with being the superuser, the
   815  Linux kernel has restrictions based on internal knowledge that this is a user namespaced
   816  process. The most notable restriction that we are aware of at this time is the
   817  inability to use `mknod`. Permission will be denied for device creation even as
   818  container `root` inside a user namespace.
   819  
   820  ## Miscellaneous options
   821  
   822  IP masquerading uses address translation to allow containers without a public
   823  IP to talk to other machines on the Internet. This may interfere with some
   824  network topologies and can be disabled with `--ip-masq=false`.
   825  
   826  Docker supports softlinks for the Docker data directory (`/var/lib/docker`) and
   827  for `/var/lib/docker/tmp`. The `DOCKER_TMPDIR` and the data directory can be
   828  set like this:
   829  
   830      DOCKER_TMPDIR=/mnt/disk2/tmp /usr/local/bin/docker daemon -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1
   831      # or
   832      export DOCKER_TMPDIR=/mnt/disk2/tmp
   833      /usr/local/bin/docker daemon -D -g /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1
   834  
   835  
   836  ## Default cgroup parent
   837  
   838  The `--cgroup-parent` option allows you to set the default cgroup parent
   839  to use for containers. If this option is not set, it defaults to `/docker` for
   840  fs cgroup driver and `system.slice` for systemd cgroup driver.
   841  
   842  If the cgroup has a leading forward slash (`/`), the cgroup is created
   843  under the root cgroup, otherwise the cgroup is created under the daemon
   844  cgroup.
   845  
   846  Assuming the daemon is running in cgroup `daemoncgroup`,
   847  `--cgroup-parent=/foobar` creates a cgroup in
   848  `/sys/fs/cgroup/memory/foobar`, whereas using `--cgroup-parent=foobar`
   849  creates the cgroup in `/sys/fs/cgroup/memory/daemoncgroup/foobar`
   850  
   851  The systemd cgroup driver has different rules for `--cgroup-parent`. Systemd
   852  represents hierarchy by slice and the name of the slice encodes the location in
   853  the tree. So `--cgroup-parent` for systemd cgroups should be a slice name. A
   854  name can consist of a dash-separated series of names, which describes the path
   855  to the slice from the root slice. For example, `--cgroup-parent=user-a-b.slice`
   856  means the memory cgroup for the container is created in
   857  `/sys/fs/cgroup/memory/user.slice/user-a.slice/user-a-b.slice/docker-<id>.scope`.
   858  
   859  This setting can also be set per container, using the `--cgroup-parent`
   860  option on `docker create` and `docker run`, and takes precedence over
   861  the `--cgroup-parent` option on the daemon.
   862  
   863  ## Daemon configuration file
   864  
   865  The `--config-file` option allows you to set any configuration option
   866  for the daemon in a JSON format. This file uses the same flag names as keys,
   867  except for flags that allow several entries, where it uses the plural
   868  of the flag name, e.g., `labels` for the `label` flag. By default,
   869  docker tries to load a configuration file from `/etc/docker/daemon.json`
   870  on Linux and `%programdata%\docker\config\daemon.json` on Windows.
   871  
   872  The options set in the configuration file must not conflict with options set
   873  via flags. The docker daemon fails to start if an option is duplicated between
   874  the file and the flags, regardless their value. We do this to avoid
   875  silently ignore changes introduced in configuration reloads.
   876  For example, the daemon fails to start if you set daemon labels
   877  in the configuration file and also set daemon labels via the `--label` flag.
   878  
   879  Options that are not present in the file are ignored when the daemon starts.
   880  This is a full example of the allowed configuration options in the file:
   881  
   882  ```json
   883  {
   884  	"authorization-plugins": [],
   885  	"dns": [],
   886  	"dns-opts": [],
   887  	"dns-search": [],
   888  	"exec-opts": [],
   889  	"exec-root": "",
   890  	"storage-driver": "",
   891  	"storage-opts": "",
   892  	"labels": [],
   893  	"log-driver": "",
   894  	"log-opts": [],
   895  	"mtu": 0,
   896  	"pidfile": "",
   897  	"graph": "",
   898  	"cluster-store": "",
   899  	"cluster-store-opts": [],
   900  	"cluster-advertise": "",
   901  	"debug": true,
   902  	"hosts": [],
   903  	"log-level": "",
   904  	"tls": true,
   905  	"tlsverify": true,
   906  	"tlscacert": "",
   907  	"tlscert": "",
   908  	"tlskey": "",
   909  	"api-cors-headers": "",
   910  	"selinux-enabled": false,
   911  	"userns-remap": "",
   912  	"group": "",
   913  	"cgroup-parent": "",
   914  	"default-ulimits": {},
   915  	"ipv6": false,
   916  	"iptables": false,
   917  	"ip-forward": false,
   918  	"ip-mask": false,
   919  	"userland-proxy": false,
   920  	"ip": "0.0.0.0",
   921  	"bridge": "",
   922  	"bip": "",
   923  	"fixed-cidr": "",
   924  	"fixed-cidr-v6": "",
   925  	"default-gateway": "",
   926  	"default-gateway-v6": "",
   927  	"icc": false,
   928  	"raw-logs": false,
   929  	"registry-mirrors": [],
   930  	"insecure-registries": [],
   931  	"disable-legacy-registry": false
   932  }
   933  ```
   934  
   935  ### Configuration reloading
   936  
   937  Some options can be reconfigured when the daemon is running without requiring
   938  to restart the process. We use the `SIGHUP` signal in Linux to reload, and a global event
   939  in Windows with the key `Global\docker-daemon-config-$PID`. The options can
   940  be modified in the configuration file but still will check for conflicts with
   941  the provided flags. The daemon fails to reconfigure itself
   942  if there are conflicts, but it won't stop execution.
   943  
   944  The list of currently supported options that can be reconfigured is this:
   945  
   946  - `debug`: it changes the daemon to debug mode when set to true.
   947  - `cluster-store`: it reloads the discovery store with the new address.
   948  - `cluster-store-opts`: it uses the new options to reload the discovery store.
   949  - `cluster-advertise`: it modifies the address advertised after reloading.
   950  - `labels`: it replaces the daemon labels with a new set of labels.
   951  
   952  Updating and reloading the cluster configurations such as `--cluster-store`,
   953  `--cluster-advertise` and `--cluster-store-opts` will take effect only if
   954  these configurations were not previously configured. If `--cluster-store`
   955  has been provided in flags and `cluster-advertise` not, `cluster-advertise`
   956  can be added in the configuration file without accompanied by `--cluster-store`
   957  Configuration reload will log a warning message if it detects a change in
   958  previously configured cluster configurations.