dockerd

daemon

Usage: dockerd COMMAND

A self-sufficient runtime for containers.

Options:
      --add-runtime runtime                   Register an additional OCI compatible runtime (default [])
      --allow-nondistributable-artifacts list Allow push of nondistributable artifacts to registry
      --api-cors-header string                Set CORS headers in the Engine API
      --authorization-plugin list             Authorization plugins to load
      --bip string                            Specify network bridge IP
  -b, --bridge string                         Attach containers to a network bridge
      --cgroup-parent string                  Set parent cgroup for all containers
      --config-file string                    Daemon configuration file (default "/etc/docker/daemon.json")
      --containerd string                     containerd grpc address
      --containerd-namespace string           Containerd namespace to use (default "moby")
      --containerd-plugins-namespace string   Containerd namespace to use for plugins (default "plugins.moby")
      --cpu-rt-period int                     Limit the CPU real-time period in microseconds for the
                                              parent cgroup for all containers
      --cpu-rt-runtime int                    Limit the CPU real-time runtime in microseconds for the
                                              parent cgroup for all containers
      --cri-containerd                        start containerd with cri
      --data-root string                      Root directory of persistent Docker state (default "/var/lib/docker")
  -D, --debug                                 Enable debug mode
      --default-address-pool pool-options     Default address pools for node specific local networks
      --default-cgroupns-mode string          Default mode for containers cgroup namespace ("host" | "private") (default "host")
      --default-gateway ip                    Container default gateway IPv4 address
      --default-gateway-v6 ip                 Container default gateway IPv6 address
      --default-ipc-mode string               Default mode for containers ipc ("shareable" | "private") (default "private")
      --default-runtime string                Default OCI runtime for containers (default "runc")
      --default-shm-size bytes                Default shm size for containers (default 64MiB)
      --default-ulimit ulimit                 Default ulimits for containers (default [])
      --dns list                              DNS server to use
      --dns-opt list                          DNS options to use
      --dns-search list                       DNS search domains to use
      --exec-opt list                         Runtime execution options
      --exec-root string                      Root directory for execution state files (default "/var/run/docker")
      --experimental                          Enable experimental features
      --fixed-cidr string                     IPv4 subnet for fixed IPs
      --fixed-cidr-v6 string                  IPv6 subnet for fixed IPs
  -G, --group string                          Group for the unix socket (default "docker")
      --help                                  Print usage
  -H, --host list                             Daemon socket(s) to connect to
      --host-gateway-ip ip                    IP address that the special 'host-gateway' string in --add-host resolves to.
                                              Defaults to the IP address of the default bridge
      --icc                                   Enable inter-container communication (default true)
      --init                                  Run an init in the container to forward signals and reap processes
      --init-path string                      Path to the docker-init binary
      --insecure-registry list                Enable insecure registry communication
      --ip ip                                 Default IP when binding container ports (default 0.0.0.0)
      --ip-forward                            Enable net.ipv4.ip_forward (default true)
      --ip-masq                               Enable IP masquerading (default true)
      --iptables                              Enable addition of iptables rules (default true)
      --ip6tables                             Enable addition of ip6tables rules (default false)
      --ipv6                                  Enable IPv6 networking
      --label list                            Set key=value labels to the daemon
      --live-restore                          Enable live restore of docker when containers are still running
      --log-driver string                     Default driver for container logs (default "json-file")
  -l, --log-level string                      Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info")
      --log-opt map                           Default log driver options for containers (default map[])
      --max-concurrent-downloads int          Set the max concurrent downloads for each pull (default 3)
      --max-concurrent-uploads int            Set the max concurrent uploads for each push (default 5)
      --max-download-attempts int             Set the max download attempts for each pull (default 5)
      --metrics-addr string                   Set default address and port to serve the metrics api on
      --mtu int                               Set the containers network MTU
      --network-control-plane-mtu int         Network Control plane MTU (default 1500)
      --no-new-privileges                     Set no-new-privileges by default for new containers
      --node-generic-resource list            Advertise user-defined resource
      --oom-score-adjust int                  Set the oom_score_adj for the daemon (default -500)
  -p, --pidfile string                        Path to use for daemon PID file (default "/var/run/docker.pid")
      --raw-logs                              Full timestamps without ANSI coloring
      --registry-mirror list                  Preferred Docker registry mirror
      --rootless                              Enable rootless mode; typically used with RootlessKit
      --seccomp-profile string                Path to seccomp profile
      --selinux-enabled                       Enable selinux support
      --shutdown-timeout int                  Set the default shutdown timeout (default 15)
  -s, --storage-driver string                 Storage driver to use
      --storage-opt list                      Storage driver options
      --swarm-default-advertise-addr string   Set default address or interface for swarm advertised address
      --tls                                   Use TLS; implied by --tlsverify
      --tlscacert string                      Trust certs signed only by this CA (default "~/.docker/ca.pem")
      --tlscert string                        Path to TLS certificate file (default "~/.docker/cert.pem")
      --tlskey string                         Path to TLS key file (default "~/.docker/key.pem")
      --tlsverify                             Use TLS and verify the remote
      --userland-proxy                        Use userland proxy for loopback traffic (default true)
      --userland-proxy-path string            Path to the userland proxy binary
      --userns-remap string                   User/Group setting for user namespaces
  -v, --version                               Print version information and quit

带有 [] 的选项可以指定多次.

Description

dockerd是管理容器的持久进程. Docker 为守护进程和客户端使用不同的二进制文件. 要运行守护程序,请键入dockerd .

要运行带有调试输出的守护进程,请使用dockerd --debug或将"debug": true添加到daemon.json文件中.

启用实验功能

通过使用--experimental标志启动dockerd或在daemon.json文件中添加"experimental": true来启用实验性功能.

Environment variables

为了便于参考, dockerd命令行支持以下环境变量列表:

  • DOCKER_DRIVER要使用的图形驱动程序.
  • DOCKER_NOWARN_KERNEL_VERSION防止警告您的 Linux 内核不适合 Docker.
  • DOCKER_RAMDISK如果设置这将禁用"pivot_root".
  • DOCKER_TMPDIR临时 Docker 文件的位置.
  • MOBY_DISABLE_PIGZ拉取镜像时不要使用unpigz并行解压层,即使安装了.

Examples

Daemon socket option

Docker 守护进程可以通过三种不同类型的 Socket 监听Docker Engine API请求: unixtcpfd .

默认情况下,在/var/run/docker.sock创建一个unix域套接字(或 IPC 套接字),需要root权限或docker组成员身份.

如果需要远程访问 Docker daemon,需要开启tcp Socket. 请注意,默认设置提供对 Docker 守护程序的未加密和未验证的直接访问 - 并且应该使用内置的 HTTPS 加密套接字或在其前面放置一个安全的 Web 代理来保护它. 您可以使用-H tcp://0.0.0.0:2375侦听所有网络接口上的端口2375 ,或使用其 IP 地址在特定网络接口上侦听: -H tcp://192.168.59.103:2375 . 通常使用端口2375进行未加密,使用端口2376与守护程序进行加密通信.

Note

如果您使用的是 HTTPS 加密套接字,请记住仅支持 TLS1.0 和更高版本. 出于安全原因,不再支持 SSLv3 及以下协议.

在基于 Systemd 的系统上,您可以通过 Systemd套接字激活与守护进程通信,使用dockerd -H fd:// . 使用fd://对大多数设置都非常有效,但您也可以指定单个套接字: dockerd -H fd://3 . 如果未找到指定的套接字激活文件,则 Docker 将退出. 您可以在Docker 源代码树中找到通过 Docker 和 Systemd 使用 Systemd 套接字激活的示例.

您可以使用多个-H选项将 Docker 守护进程配置为同时侦听多个套接字:

下面的示例在默认的 unix 套接字上运行守护进程侦听,并在此主机上的 2 个特定 IP 地址上运行:

$ sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2

Docker 客户端将DOCKER_HOST环境变量来为客户端设置-H标志. 使用以下命令之一

$ docker -H tcp://0.0.0.0:2375 ps
$ export DOCKER_HOST="tcp://0.0.0.0:2375"

$ docker ps

DOCKER_TLS_VERIFY环境变量设置为空字符串以外的任何值都等效于设置--tlsverify标志. 以下是等价的:

$ docker --tlsverify ps
# or
$ export DOCKER_TLS_VERIFY=1
$ docker ps

Docker 客户端将支持HTTP_PROXYHTTPS_PROXYNO_PROXY环境变量(或其小写版本). HTTPS_PROXY优先于HTTP_PROXY .

Docker 客户端支持通过 SSH 连接到远程守护进程:

$ docker -H ssh://me@example.com:22 ps
$ docker -H ssh://me@example.com ps
$ docker -H ssh://example.com ps

要使用 SSH 连接,您需要设置ssh以便它可以通过公钥验证访问远程主机. 不支持密码验证. 如果您的密钥受密码保护,则需要设置ssh-agent .

Bind Docker to another host/port or a Unix socket

Warning

将默认docker守护进程绑定到 TCP 端口或 Unix docker用户组将通过允许非 root 用户在主机上获得root访问权限来增加您的安全风险. 确保您控制对docker的访问. 如果您绑定到一个 TCP 端口,那么任何可以访问该端口的人都拥有完整的 Docker 访问权限; 因此不建议在开放网络上使用.

使用-H可以让 Docker 守护进程监听特定的 IP 和端口. 默认情况下,它将侦听unix:///var/run/docker.sock以仅允许root用户进行本地连接. 您可以将其设置为0.0.0.0:2375或特定的主机 IP 以授予所有人访问权限,但不建议这样做,因为这样就可以轻松获得对运行守护程序的主机的 root 访问权限.

同样,Docker 客户端可以使用-H连接到自定义端口. Docker 客户端将默认连接到 Linux 上的unix:///var/run/docker.sock和 Windows 上的tcp://127.0.0.1:2376 .

-H接受以下格式的主机和端口分配:

tcp://[host]:[port][path] or unix://path

例如:

  • tcp:// -> TCP 连接到127.0.0.1 ,当 TLS 加密开启时,端口2376 ,或端口2375 ,当通信是纯文本时.
  • tcp://host:2375 -> 主机上的 TCP 连接:2375
  • tcp://host:2375/path -> 主机上的 TCP 连接:2375 并将路径添加到所有请求
  • unix://path/to/socket -> Unix socket 位于path/to/socket

-H ,当为空时,将默认为与未传入-H时相同的值.

-H也接受 TCP 绑定的简写形式: host:host:port:port

在守护进程模式下运行 Docker:

$ sudo <path to>/dockerd -H 0.0.0.0:5555 &

Download an ubuntu image:

$ docker -H :5555 pull ubuntu

您可以使用多个-H ,例如,如果您想同时监听 TCP 和 Unix 套接字

$ sudo dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock &
# Download an ubuntu image, use default Unix socket
$ docker pull ubuntu
# OR use the TCP port
$ docker -H tcp://127.0.0.1:2375 pull ubuntu

Daemon storage-driver

在 Linux 上,Docker 守护进程支持多种不同的镜像层存储驱动程序: aufsdevicemapperbtrfszfsoverlayoverlay2fuse-overlayfs .

aufs驱动程序是最古老的,但基于不太可能合并到主内核中的 Linux 内核补丁集. 这些也已知会导致一些严重的内核崩溃. 然而, aufs允许容器共享可执行和共享库内存,因此在运行数千个具有相同程序或库的容器时是一个有用的选择.

devicemapper驱动程序使用精简配置和写入时复制 (CoW) 快照. 对于每个 devicemapper 图形位置——通常是/var/lib/docker/devicemapper基于两个块设备创建一个精简池,一个用于数据,一个用于元数据. 默认情况下,这些块设备是通过使用自动创建的稀疏文件的回送挂载来自动创建的. 有关如何自定义此设置的方法,请参阅下面的Devicemapper 选项. ~jpetazzo/Resizing Docker containers with the Device Mapper 插件文章解释了如何在不使用选项的情况下调整现有设置.

btrfs驱动程序对于docker build来说非常快 - 但就像devicemapper一样,它不会在设备之间共享可执行内存. 使用dockerd --storage-driver btrfs --data-root /mnt/btrfs_partition .

zfs驱动程序可能不如btrfs快,但在稳定性方面的记录更长. 多亏了Single Copy ARC ,克隆之间的共享块将只缓存一次. 使用dockerd -s zfs . 要选择不同的 zfs 文件系统,请设置zfs.fsname选项,如ZFS 选项中所述.

overlay是一个非常快速的联合文件系统. 从3.18.0 开始,它现在已合并到主 Linux 内核中. overlay还支持页面缓存共享,这意味着访问同一文件的多个容器可以共享单个页面缓存条目(或多个条目),这使得overlayaufs驱动程序一样有效地使用内存. 调用dockerd -s overlay来使用它.

overlay2使用相同的快速联合文件系统,但利用 Linux 内核 4.0 中添加的附加功能来避免过多的 inode 消耗. 调用dockerd -s overlay2来使用它.

Note

overlay存储驱动程序可能会导致过多的 inode 消耗(尤其是随着图像数量的增长). 我们建议改用overlay2存储驱动程序.

Note

btrfs或任何 Copy on Write 文件系统上当前不支持overlayoverlay2 ,并且只能在ext4分区上使用.

fuse-overlayfs驱动程序类似于overlay2 ,但在用户空间中工作. fuse-overlayfs驱动程序预计将用于 Rootless模式.

在 Windows 上,Docker 守护进程支持单个镜像层存储驱动程序,具体取决于镜像平台: windowsfilter用于 Windows 镜像, lcow用于 Windows 上的 Linux 容器.

Options per storage driver

可以使用--storage-opt标志指定的选项配置特定的存储驱动程序. devicemapper的选项以dm为前缀, zfs的选项以zfs开头, btrfs的选项以btrfs开头, lcow的选项以lcow开头.

Devicemapper options

这是 Linux 上 devicemapper 的配置文件示例:

{
  "storage-driver": "devicemapper",
  "storage-opts": [
    "dm.thinpooldev=/dev/mapper/thin-pool",
    "dm.use_deferred_deletion=true",
    "dm.use_deferred_removal=true"
  ]
}
dm.thinpooldev

指定用于精简池的自定义块存储设备.

如果使用块设备进行设备映射器存储,最好使用lvm来创建和管理精简池卷. 然后将此卷交给 Docker 以专门创建映像和容器所需的快照卷.

在 Engine 之外管理精简池是让 Docker 使用设备映射器精简配置作为 Docker 容器的后备存储的功能最丰富的方法. 基于 lvm 的精简池管理功能的亮点包括:自动或交互式精简池调整大小支持、动态更改精简池功能、在 lvm 激活精简池时自动检查精简元数据等.

如果未提供精简池,则会创建回送文件作为备用. Loopback 很慢,但可以在没有任何存储预配置的情况下使用. 强烈建议您不要在生产中使用环回. 确保您的引擎守护程序提供了--storage-opt dm.thinpooldev参数.

Example:
$ sudo dockerd --storage-opt dm.thinpooldev=/dev/mapper/thin-pool
dm.directlvm_device

作为提供上述精简池的替代方案,Docker 可以为您设置块设备.

Example:
$ sudo dockerd --storage-opt dm.directlvm_device=/dev/xvdf
dm.thinp_percent

设置传入块设备用于存储的百分比.

Example:
$ sudo dockerd --storage-opt dm.thinp_percent=95
dm.thinp_metapercent

设置传入块设备用于元数据存储的百分比.

Example:
$ sudo dockerd --storage-opt dm.thinp_metapercent=1
dm.thinp_autoextend_threshold

设置在lvm尝试自动扩展可用空间之前使用的空间百分比值 [100 = 禁用]

Example:
$ sudo dockerd --storage-opt dm.thinp_autoextend_threshold=80
dm.thinp_autoextend_percent

设置值百分比值以在lvm尝试自动扩展可用空间时增加精简池 [100 = 禁用]

Example:
$ sudo dockerd --storage-opt dm.thinp_autoextend_percent=20
dm.basesize

指定创建基本设备时要使用的大小,这会限制图像和容器的大小. 默认值为 10G. 请注意,精简设备本质上是"稀疏的",因此大部分为空的 10G 设备不会使用池中的 10 GB 空间. 但是,设备越大,文件系统就会为空箱使用更多空间.

基本设备大小可以在守护进程重新启动时增加,这将允许所有未来的图像和容器(基于这些新图像)具有新的基本设备大小.

Examples
$ sudo dockerd --storage-opt dm.basesize=50G

这会将基本设备大小增加到 50G. 如果现有的基本设备大小大于 50G,Docker 守护程序将抛出错误. 用户可以使用此选项扩展基本设备大小,但不允许缩小.

此值影响系统范围的"基本"空文件系统,该文件系统可能已经被拉取的图像初始化和继承. 通常,对此值的更改需要额外的步骤才能生效:

$ sudo service docker stop

$ sudo rm -rf /var/lib/docker

$ sudo service docker start
dm.loopdatasize

Note

此选项配置 devicemapper 环回,不应在生产中使用.

指定为用于精简池的"数据"设备创建环回文件时使用的大小. 默认大小为 100G. 该文件是稀疏的,因此它最初不会占用这么多空间.

Example
$ sudo dockerd --storage-opt dm.loopdatasize=200G
dm.loopmetadatasize

Note

此选项配置 devicemapper 环回,不应在生产中使用.

指定为用于精简池的"元数据"设备创建环回文件时使用的大小. 默认大小为 2G. 该文件是稀疏的,因此它最初不会占用这么多空间.

Example
$ sudo dockerd --storage-opt dm.loopmetadatasize=4G
dm.fs

指定要用于基本设备的文件系统类型. 支持的选项是"ext4"和"xfs". 默认为"xfs"

Example
$ sudo dockerd --storage-opt dm.fs=ext4
dm.mkfsarg

指定创建基本设备时要使用的额外 mkfs 参数.

Example
$ sudo dockerd --storage-opt "dm.mkfsarg=-O ^has_journal"
dm.mountopt

指定安装瘦设备时使用的额外安装选项.

Example
$ sudo dockerd --storage-opt dm.mountopt=nodiscard
dm.datadev

(已弃用,使用dm.thinpooldev

指定用于精简池数据的自定义块设备.

如果将块设备用于设备映射器存储,理想情况下应指定datadevmetadatadev以完全避免使用环回设备.

Example
$ sudo dockerd \
      --storage-opt dm.datadev=/dev/sdb1 \
      --storage-opt dm.metadatadev=/dev/sdc1
dm.metadatadev

(已弃用,使用dm.thinpooldev

指定用于精简池元数据的自定义块设备.

为了获得最佳性能,元数据应该位于与数据不同的主轴上,甚至更好地位于 SSD 上.

如果设置一个新的元数据池,它必须是有效的. 这可以通过将前 4k 归零以指示空元数据来实现,如下所示:

$ dd if=/dev/zero of=$metadata_dev bs=4096 count=1
Example
$ sudo dockerd \
      --storage-opt dm.datadev=/dev/sdb1 \
      --storage-opt dm.metadatadev=/dev/sdc1
dm.blocksize

指定用于精简池的自定义块大小. 默认块大小为 64K.

Example
$ sudo dockerd --storage-opt dm.blocksize=512K
dm.blkdiscard

删除 devicemapper 设备时启用或禁用blkdiscard的使用. 这在使用环回设备时默认启用(仅),并且需要在删除图像/容器时重新解析环回文件.

在回送时禁用此功能会导致容器移除时间更快,但会导致/var/lib/docker目录中使用的空间在容器被移除时不会返回给系统用于其他用途.

Examples
$ sudo dockerd --storage-opt dm.blkdiscard=false
dm.override_udev_sync_check

覆盖devicemapperudev之间的udev同步检查. udev是 Linux 内核的设备管理器.

要查看使用devicemapper驱动程序的 Docker 守护程序的udev同步支持,请运行:

$ docker info
<...>
Udev Sync Supported: true
<...>

udev同步支持为true时, devicemapper和 udev 可以协调容器设备的激活和停用.

udev同步支持为false时,在创建和清理过程中devicemapperudev之间会出现竞争条件. 竞争条件会导致错误和失败. (有关这些故障的信息,请参阅docker#4036

要允许docker守护进程启动,无论不支持udev同步,请将dm.override_udev_sync_check设置为 true:

$ sudo dockerd --storage-opt dm.override_udev_sync_check=true

当此值为true时, devicemapper会继续并简单地警告您正在发生错误.

Note

理想的情况是追求一个支持与udev同步的docker守护进程和环境. 有关此主题的进一步讨论,请参阅docker#4036 . 否则,设置此标志以将现有 Docker 守护程序迁移到具有受支持环境的守护程序.

dm.use_deferred_removal

如果libdm和内核驱动程序支持该机制,则启用延迟设备删除.

延迟设备移除意味着如果在移除/停用设备时设备繁忙,则在设备上安排延迟移除. 当设备的最后一个用户退出时,设备会自动消失.

例如,当一个容器退出时,其关联的瘦设备将被移除. 如果该设备已泄漏到某个其他挂载命名空间且无法删除,则容器退出仍会成功,并且此选项会导致系统安排设备延迟删除. 它不会在尝试删除繁忙设备的循环中等待.

Example
$ sudo dockerd --storage-opt dm.use_deferred_removal=true
dm.use_deferred_deletion

允许对精简池设备使用延迟设备删除. 默认情况下,精简池设备删除是同步的. 在删除容器之前,Docker 守护程序会删除所有关联的设备. 如果存储驱动程序无法删除设备,则容器删除失败并且守护程序返回.

Error deleting container: Error response from daemon: Cannot destroy container

为避免此故障,请在守护程序上启用延迟设备删除和延迟设备删除.

$ sudo dockerd \
      --storage-opt dm.use_deferred_deletion=true \
      --storage-opt dm.use_deferred_removal=true

启用这两个选项后,如果驱动程序删除容器时设备正忙,驱动程序会将设备标记为已删除. 稍后,当设备不使用时,驱动程序将其删除.

一般来说,默认情况下启用此选项应该是安全的. 当跨多个挂载命名空间发生无意的挂载点泄漏时,它将有所帮助.

dm.min_free_space

指定成功创建新设备所需的精简池中的最小可用空间百分比. 此检查适用于空闲数据空间和空闲元数据空间. 有效值为 0% - 99%. 值 0% 禁用可用空间检查逻辑. 如果用户没有为此选项指定值,则引擎使用默认值 10%.

每当创建新的精简池设备时(在docker pull期间或在容器创建期间),引擎都会检查最小可用空间是否可用. 如果没有足够的空间,则设备创建失败并且任何相关的docker操作都会失败.

要从此错误中恢复,您必须在精简池中创建更多可用空间以从错误中恢复. 您可以通过从精简池中删除一些映像和容器来创建可用空间. 您还可以向精简池添加更多存储.

要为 LVM(逻辑卷管理)精简池添加更多空间,只需向卷组容器精简池添加更多存储即可; 这应该会自动解决任何错误. 如果您的配置使用循环设备,则停止引擎守护程序,增加循环文件的大小并重新启动守护程序以解决问题.

Example
$ sudo dockerd --storage-opt dm.min_free_space=10%
dm.xfs_nospace_max_retries

指定当底层存储设备返回 ENOSPC(无空间)错误时 XFS 应尝试完成 IO 的最大重试次数.

默认情况下,XFS 会无限重试以完成 IO,这可能会导致进程无法终止. 要改变这种行为,可以将 xfs_nospace_max_retries 设置为 0,XFS 在获得 ENOSPC 后不会重试 IO 并将关闭文件系统.

Example
$ sudo dockerd --storage-opt dm.xfs_nospace_max_retries=0
dm.libdm_log_level

指定将转发到dockerd日志的最大libdm日志级别(由--log-level指定). 此选项主要用于调试涉及libdm的问题. 使用默认值以外的值可能会导致记录误报警告.

指定的值必须在有效的libdm日志级别范围内. 在撰写本文时,以下是libdm日志级别列表以及dockerd输出时对应的级别.

libdm Level Value --log-level
_LOG_FATAL 2 error
_LOG_ERR 3 error
_LOG_WARN 4 warn
_LOG_NOTICE 5 info
_LOG_INFO 6 info
_LOG_DEBUG 7 debug
Example
$ sudo dockerd \
      --log-level debug \
      --storage-opt dm.libdm_log_level=7

ZFS options

zfs.fsname

设置 zfs 文件系统,docker 将在该文件系统下创建自己的数据集. 默认情况下,docker 会选择 docker graph ( /var/lib/docker ) 所在的 zfs 文件系统.

Example
$ sudo dockerd -s zfs --storage-opt zfs.fsname=zroot/docker

Btrfs options

btrfs.min_space

指定创建用于容器的子卷时使用的最小大小. 如果用户在使用--storage-opt size选项创建或运行容器时使用 btrfs 的磁盘配额,docker 应确保大小不能小于btrfs.min_space .

Example
$ sudo dockerd -s btrfs --storage-opt btrfs.min_space=10G

Overlay2 options

overlay2.override_kernel_check

覆盖允许 overlay2 的 Linux 内核版本检查. 在 4.0.0 的 Linux 内核中添加了对 overlay2 所需的指定多个较低目录的支持. 但是,一些较旧的内核版本可能会被修补以添加对 OverlayFS 的多个较低目录的支持. 仅在验证内核中存在此支持后才应使用此选项. 在没有此支持的内核上应用此选项将导致挂载失败.

overlay2.size

设置容器的默认最大大小. 仅当支持 fs 为xfs并使用pquota挂载选项挂载时才支持它. 在这些条件下,用户可以传递小于支持 fs 大小的任何大小.

Example
$ sudo dockerd -s overlay2 --storage-opt overlay2.size=1G

Windowsfilter options

size

指定创建用于容器的沙箱时要使用的大小. 默认为 20G.

Example
C:\> dockerd --storage-opt size=40G

LCOW (Linux Containers on Windows) options

lcow.globalmode

指定守护程序是否根据需要实例化实用程序 VM 实例(如果省略,建议使用默认值),还是使用单个全局实用程序 VM(性能更好,但具有安全隐患,不建议用于生产部署).

Example
C:\> dockerd --storage-opt lcow.globalmode=false
lcow.kirdpath

指定用于引导实用程序 VM 的一对内核和 initrd 文件所在位置的文件夹路径. 默认为%ProgramFiles%\Linux Containers .

Example
C:\> dockerd --storage-opt lcow.kirdpath=c:\path\to\files
lcow.kernel

指定位于lcow.kirdpath路径中的内核文件的文件名. 默认为bootx64.efi .

Example
C:\> dockerd --storage-opt lcow.kernel=kernel.efi
lcow.initrd

指定位于lcow.kirdpath路径中的 initrd 文件的文件名. 默认为initrd.img .

Example
C:\> dockerd --storage-opt lcow.initrd=myinitrd.img
lcow.bootparameters

指定在内核/initrd 模式下用于引导实用程序 VM 的其他引导参数. 如果实用程序 VM 从 VHD 引导,则忽略. 这些设置是内核特定的.

Example
C:\> dockerd --storage-opt "lcow.bootparameters='option=value'"
lcow.vhdx

指定自定义 VHDX 以引导实用程序 VM,作为内核和 initrd 引导的替代方法. 默认为uvm.vhdx下的lcow.kirdpath .

Example
C:\> dockerd --storage-opt lcow.vhdx=custom.vhdx
lcow.timeout

指定实用程序 VM 操作的超时时间(以秒为单位). 默认为 300.

Example
C:\> dockerd --storage-opt lcow.timeout=240
lcow.sandboxsize

指定创建用于容器的沙箱时要使用的大小(以 GB 为单位). 默认为 20.不能小于 20.

Example
C:\> dockerd --storage-opt lcow.sandboxsize=40

Docker runtime execution options

Docker 守护程序依赖于符合OCI的运行时(通过containerd守护程序调用)作为其与 Linux 内核namespacescgroupsSELinux的接口.

默认情况下,Docker 守护进程会自动启动containerd . 如果要控制containerd启动,请手动启动containerd并使用--containerd标志将路径传递给containerd套接字. 例如:

$ sudo dockerd --containerd /var/run/dev/docker-containerd.sock

可以通过配置文件或使用--add-runtime命令行参数向守护程序注册运行时.

以下是通过配置添加 2 个运行时的示例:

{
  "default-runtime": "runc",
  "runtimes": {
    "custom": {
      "path": "/usr/local/bin/my-runc-replacement",
      "runtimeArgs": [
        "--debug"
      ]
    },
    "runc": {
      "path": "runc"
    }
  }
}

这是通过命令行的相同示例:

$ sudo dockerd --add-runtime runc=runc --add-runtime custom=/usr/local/bin/my-runc-replacement

Note

Defining runtime arguments via the command line is not supported.

Options for the runtime

您可以使用--exec-opt标志指定的选项配置运行时. 所有标志的选项都有native前缀. 一个native.cgroupdriver选项可用.

native.cgroupdriver选项指定容器的 cgroups 的管理. 您只能指定cgroupfssystemd . 如果您指定systemd但它不可用,则系统会出错. 如果省略native.cgroupdriver选项, cgroupfs用于 cgroup v1 主机, systemd用于 cgroup v2 主机,且 systemd 可用.

此示例将cgroupdriver设置为systemd

$ sudo dockerd --exec-opt native.cgroupdriver=systemd

设置此选项适用于守护程序启动的所有容器.

Windows Container 也将--exec-opt用于特殊目的. Docker 用户可以指定默认的容器隔离技术,例如:

> dockerd --exec-opt isolation=hyperv

将使hyperv成为 Windows 上的默认隔离技术. 如果守护进程启动时没有指定隔离值,则在 Windows 客户端上,默认为hyperv ,在 Windows 服务器上,默认为process .

Daemon DNS options

要为所有 Docker 容器设置 DNS 服务器,请使用:

$ sudo dockerd --dns 8.8.8.8

要为所有 Docker 容器设置 DNS 搜索域,请使用:

$ sudo dockerd --dns-search example.com

Allow push of nondistributable artifacts

某些图像(例如,Windows 基础图像)包含其分发受许可证限制的工件. 当这些图像被推送到注册表时,不包括受限制的工件.

要覆盖特定注册表的此行为,请以下列形式之一使用--allow-nondistributable-artifacts选项:

  • --allow-nondistributable-artifacts myregistry:5000告诉 Docker 守护进程将不可分发的工件推送到 myregistry:5000.
  • --allow-nondistributable-artifacts 10.1.0.0/16告诉 Docker 守护进程将不可分发的工件推送到其解析的 IP 地址在 CIDR 语法描述的子网内的所有注册表.

此选项可以多次使用.

在将包含不可分发工件的图像推送到气隙网络上的注册表时,此选项很有用,因此该网络上的主机可以在不连接到另一台服务器的情况下提取图像.

警告:不可分发的工件通常对分发和共享的方式和位置有限制. 仅使用此功能将工件推送到私有注册表,并确保您遵守任何涵盖重新分发不可分发工件的条款.

Insecure registries

Docker 认为私有注册表是安全的或不安全的. 在本节的其余部分, registry用于私有注册中心, myregistry:5000是私有注册中心的占位符示例.

安全注册表使用 TLS,其 CA 证书的副本放置在 Docker 主机上的/etc/docker/certs.d/myregistry:5000/ca.crt . 不安全的注册表要么不使用 TLS(即侦听纯文本 HTTP),要么使用 TLS 和 Docker 守护进程不知道的 CA 证书. 如果在/etc/docker/certs.d/myregistry:5000/下找不到证书,或者证书验证失败(即错误的 CA),则可能发生后者.

默认情况下,Docker 假定除了本地(参见下面的本地注册表)之外的所有注册表都是安全的. 如果 Docker 假定注册表是安全的,则无法与不安全的注册表通信. 为了与不安全的注册表通信,Docker 守护进程需要以下两种形式之一的--insecure-registry

  • --insecure-registry myregistry:5000告诉 Docker 守护进程 myregistry:5000 应该被认为是不安全的.
  • --insecure-registry 10.1.0.0/16告诉 Docker 守护进程,其域解析为 IP 地址的所有注册中心都是 CIDR 语法描述的子网的一部分,应该被认为是不安全的.

该标志可以多次使用,以允许将多个注册表标记为不安全.

如果不安全的注册表未标记为不安全,则docker pulldocker pushdocker search将导致错误消息提示用户保护或将--insecure-registry标志传递给 Docker 守护程序,如上所述.

从 Docker 1.3.2 开始,IP 地址在 127.0.0.0/8 范围内的本地注册表会自动标记为不安全. 不建议依赖这个,因为它将来可能会改变.

启用--insecure-registry ,即允许未加密和/或不受信任的通信,在运行本地注册表时可能很有用. 但是,由于它的使用会产生安全漏洞,因此只能出于测试目的启用它. 为了提高安全性,用户应将其 CA 添加到其系统的受信任 CA 列表中,而不是启用--insecure-registry .

Legacy Registries

不再支持针对仅支持旧版 v1 协议的注册表的操作. 具体来说,守护进程不会尝试pushpulllogin到 v1 注册表. 例外情况是仍然可以在 v1 注册表上执行的search .

Running a Docker daemon behind an HTTPS_PROXY

在使用HTTPS代理的 LAN 中运行时,Docker Hub 证书将被代理的证书替换. 这些证书需要添加到 Docker 主机的配置中:

  1. Install the ca-certificates package for your distribution
  2. 向您的网络管理员询问代理的 CA 证书并将其附加到/etc/pki/tls/certs/ca-bundle.crt
  3. 然后使用HTTPS_PROXY=http://username:password@proxy:port/ dockerd启动 Docker 守护进程. username:password@是可选的 - 仅当您的代理设置为需要身份验证时才需要.

这只会将代理和身份验证添加到 Docker 守护进程的请求中 - 您的docker build和正在运行的容器将需要额外的配置才能使用代理

Default ulimit settings

--default-ulimit允许您设置用于所有容器的默认ulimit选项. 它采用与--ulimit docker run的 --ulimit 相同的选项. 如果未设置这些默认值,则ulimit设置将从 Docker 守护程序继承(如果未在docker run上设置). 传递给 docker docker run的任何--ulimit选项都将覆盖这些默认值.

使用ulimit标志设置nproc时要小心,因为nproc是由 Linux 设计的,用于设置用户可用的最大进程数,而不是容器. 有关详细信息,请查看运行参考.

Node discovery

--cluster-advertise选项指定此特定守护程序实例在向集群通告自身时应使用的host:portinterface:port组合. 远程主机通过此值访问守护程序. 如果您指定一个接口,请确保它包含实际 Docker 主机的 IP 地址. 对于通过docker-machine创建的引擎安装,接口通常是eth1 .

守护进程使用libkv来通告集群内的节点. 一些键值后端支持双向 TLS. 要配置守护程序使用的客户端 TLS 设置,可以使用--cluster-store-opt标志进行配置,指定 PEM 编码文件的路径. 例如:

$ sudo dockerd \
    --cluster-advertise 192.168.1.2:2376 \
    --cluster-store etcd://192.168.1.2:2379 \
    --cluster-store-opt kv.cacertfile=/path/to/ca.pem \
    --cluster-store-opt kv.certfile=/path/to/cert.pem \
    --cluster-store-opt kv.keyfile=/path/to/key.pem

当前支持的集群存储选项有:

Option Description
discovery.heartbeat 以秒为单位指定心跳计时器,守护进程将其用keepalive机制,以确保发现模块将节点视为集群中的活动. 如果未配置,则默认值为 20 秒.
discovery.ttl 以秒为单位指定 TTL(生存时间),如果在配置的 ttl 值内未收到有效的心跳,发现模块将使用该 TTL 使节点超时. 如果未配置,则默认值为 60 秒.
kv.cacertfile 指定具有要信任的 PEM 编码 CA 证书的本地文件的路径.
kv.certfile 指定带有 PEM 编码证书的本地文件的路径. 此证书用作与 Key/Value 存储进行通信的客户端证书.
kv.keyfile 使用 PEM 编码的私钥指定本地文件的路径. 此私钥用作与 Key/Value 存储进行通信的客户端密钥.
kv.path 指定键/值存储中的路径. 如果未配置,则默认值为"docker/nodes".

Access authorization

Docker 的访问授权可以通过您的组织可以购买或自己构建的授权插件进行扩展. 当您使用--authorization-plugin=PLUGIN_ID选项启动 Docker daemon时,您可以安装一个或多个授权插件.

$ sudo dockerd --authorization-plugin=plugin1 --authorization-plugin=plugin2,...

PLUGIN_ID值是插件的名称或其规范文件的路径. 插件的实现决定了您是否可以指定名称或路径. 请咨询您的 Docker 管理员以获取有关您可用的插件的信息.

安装插件后,插件允许或拒绝通过命令行或 Docker 引擎 API 向daemon发出的请求. 如果您安装了多个插件,则每个插件都必须按顺序允许请求完成.

有关如何创建授权插件的信息,请参阅授权插件部分.

Daemon user namespace options

Linux 内核用户命名空间支持通过使进程(进而容器)具有唯一的用户和组 ID 范围来提供额外的安全性,这些 ID 超出了主机系统使用的传统用户和组范围. 潜在的最重要的安全改进是,默认情况下,以root用户身份运行的容器进程将在容器内具有预期的管理权限(有一些限制),但将有效地映射到主机上的非特权uid .

有关如何使用此功能的详细信息以及限制,请参阅使用用户命名空间隔离容器.

Miscellaneous options

IP 伪装使用地址转换来允许没有公共 IP 的容器与 Internet 上的其他机器通信. 这可能会干扰某些网络拓扑,并且可以使用--ip-masq=false禁用.

Docker 支持 Docker 数据目录 ( /var/lib/docker ) 和/var/lib/docker/tmp的软链接. DOCKER_TMPDIR和数据目录可以这样设置:

$ DOCKER_TMPDIR=/mnt/disk2/tmp /usr/local/bin/dockerd --data-root /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1

or

$ export DOCKER_TMPDIR=/mnt/disk2/tmp
$ /usr/local/bin/dockerd --data-root /var/lib/docker -H unix:// > /var/lib/docker-machine/docker.log 2>&1

Default cgroup parent

--cgroup-parent选项允许您设置用于容器的默认 cgroup 父级. 如果未设置此选项,则默认为/docker用于 fs cgroup 驱动程序和system.slice用于 systemd cgroup 驱动程序.

如果 cgroup 有前导正斜杠 ( / ),则在根 cgroup 下创建 cgroup,否则在守护进程 cgroup 下创建 cgroup.

假设守护进程在 cgroup daemoncgroup中运行, --cgroup-parent=/foobar/sys/fs/cgroup/memory/foobar foobar 创建一个 cgroup,而使用--cgroup-parent=foobar/sys/fs/cgroup/memory/daemoncgroup/foobar创建一个 cgroup /sys/fs/cgroup/memory/daemoncgroup/foobar

systemd cgroup 驱动程序对--cgroup-parent有不同的规则. Systemd 按切片表示层次结构,切片的名称编码树中的位置. 所以 systemd cgroups 的--cgroup-parent应该是一个切片名称. 名称可以由以破折号分隔的一系列名称组成,这些名称描述了从根切片到切片的路径. 例如, --cgroup-parent=user-ab.slice表示容器的内存 cgroup 在/sys/fs/cgroup/memory/user.slice/user-a.slice/user-ab.slice/docker-<id>.scope中创建/sys/fs/cgroup/memory/user.slice/user-a.slice/user-ab.slice/docker-<id>.scope .

也可以使用 docker docker create和 docker docker run上的--cgroup-parent选项为每个容器设置此设置,并且优先于守护程序上的--cgroup-parent选项.

Daemon metrics

--metrics-addr选项采用 tcp 地址来提供指标 API. 此功能仍处于实验阶段,因此,守护程序必须在实验模式下运行才能使此功能正常工作.

要在localhost:9323上提供指标 API,您需要指定--metrics-addr 127.0.0.1:9323 ,允许您在127.0.0.1:9323/metrics的 API 上发出请求,以接收prometheus格式的指标.

端口9323与 Docker 指标关联的默认端口,以避免与其他 prometheus 导出器和服务发生冲突.

如果您正在运行 prometheus 服务器,您可以将此地址添加到您的抓取配置中,以让 prometheus 在 Docker 上收集指标. 有关 prometheus 的更多信息,请参阅prometheus 网站.

scrape_configs:
  - job_name: 'docker'
    static_configs:
      - targets: ['127.0.0.1:9323']

请注意,此功能仍被标记为实验性,因为在此功能仍处于实验性时,指标和指标名称可能会发生变化. 请就您希望在 API 中收集的内容提供反馈.

Node Generic Resources

--node-generic-resources选项采用键值对( key=value )列表,允许您在 swarm 集群中通告用户定义的资源.

当前的预期用例是宣传 NVIDIA GPU,以便请求NVIDIA-GPU=[0-16]服务可以登陆具有足够 GPU 来运行任务的节点.

使用示例:

{
  "node-generic-resources": [
    "NVIDIA-GPU=UUID1",
    "NVIDIA-GPU=UUID2"
  ]
}

Daemon configuration file

--config-file选项允许您以 JSON 格式为守护程序设置任何配置选项. 该文件使用与键相同的标志名称,除了允许多个条目的标志,其中它使用标志名称的复数,例如labels标志的label .

配置文件中设置的选项不能与通过标志设置的选项冲突. 如果选项在文件和标志之间重复,则 docker 守护程序将无法启动,无论它们的值如何. 我们这样做是为了避免默默地忽略配置重新加载中引入的更改. 例如,如果您在配置文件中设置了守护进程标签,并且还通过--label标志设置了守护进程标签,则守护进程将无法启动. 当守护程序启动时,文件中不存在的选项将被忽略.

On Linux

Linux 上配置文件的默认位置是/etc/docker/daemon.json . --config-file标志可用于指定非默认位置.

这是 Linux 上允许的配置选项的完整示例:

{
  "allow-nondistributable-artifacts": [],
  "api-cors-header": "",
  "authorization-plugins": [],
  "bip": "",
  "bridge": "",
  "cgroup-parent": "",
  "cluster-advertise": "",
  "cluster-store": "",
  "cluster-store-opts": {},
  "containerd": "/run/containerd/containerd.sock",
  "containerd-namespace": "docker",
  "containerd-plugin-namespace": "docker-plugins",
  "data-root": "",
  "debug": true,
  "default-address-pools": [
    {
      "base": "172.30.0.0/16",
      "size": 24
    },
    {
      "base": "172.31.0.0/16",
      "size": 24
    }
  ],
  "default-cgroupns-mode": "private",
  "default-gateway": "",
  "default-gateway-v6": "",
  "default-runtime": "runc",
  "default-shm-size": "64M",
  "default-ulimits": {
    "nofile": {
      "Hard": 64000,
      "Name": "nofile",
      "Soft": 64000
    }
  },
  "dns": [],
  "dns-opts": [],
  "dns-search": [],
  "exec-opts": [],
  "exec-root": "",
  "experimental": false,
  "features": {},
  "fixed-cidr": "",
  "fixed-cidr-v6": "",
  "group": "",
  "hosts": [],
  "icc": false,
  "init": false,
  "init-path": "/usr/libexec/docker-init",
  "insecure-registries": [],
  "ip": "0.0.0.0",
  "ip-forward": false,
  "ip-masq": false,
  "iptables": false,
  "ip6tables": false,
  "ipv6": false,
  "labels": [],
  "live-restore": true,
  "log-driver": "json-file",
  "log-level": "",
  "log-opts": {
    "cache-disabled": "false",
    "cache-max-file": "5",
    "cache-max-size": "20m",
    "cache-compress": "true",
    "env": "os,customer",
    "labels": "somelabel",
    "max-file": "5",
    "max-size": "10m"
  },
  "max-concurrent-downloads": 3,
  "max-concurrent-uploads": 5,
  "max-download-attempts": 5,
  "mtu": 0,
  "no-new-privileges": false,
  "node-generic-resources": [
    "NVIDIA-GPU=UUID1",
    "NVIDIA-GPU=UUID2"
  ],
  "oom-score-adjust": -500,
  "pidfile": "",
  "raw-logs": false,
  "registry-mirrors": [],
  "runtimes": {
    "cc-runtime": {
      "path": "/usr/bin/cc-runtime"
    },
    "custom": {
      "path": "/usr/local/bin/my-runc-replacement",
      "runtimeArgs": [
        "--debug"
      ]
    }
  },
  "seccomp-profile": "",
  "selinux-enabled": false,
  "shutdown-timeout": 15,
  "storage-driver": "",
  "storage-opts": [],
  "swarm-default-advertise-addr": "",
  "tls": true,
  "tlscacert": "",
  "tlscert": "",
  "tlskey": "",
  "tlsverify": true,
  "userland-proxy": false,
  "userland-proxy-path": "/usr/libexec/docker-proxy",
  "userns-remap": ""
}

Note:

您不能在daemon.json中设置已在守护程序启动时设置为标志的选项. 在使用systemd启动 Docker 守护程序的系统上, -H已设置,因此您不能使用daemon.json中的hosts键添加侦听地址. 请参阅"自定义 Docker 守护程序选项"了解如何使用 systemd 插入文件完成此任务.

On Windows

Windows 上配置文件的默认位置是%programdata%\docker\config\daemon.json . --config-file标志可用于指定非默认位置.

这是 Windows 上允许的配置选项的完整示例:

{
  "allow-nondistributable-artifacts": [],
  "authorization-plugins": [],
  "bridge": "",
  "cluster-advertise": "",
  "cluster-store": "",
  "containerd": "\\\\.\\pipe\\containerd-containerd",
  "containerd-namespace": "docker",
  "containerd-plugin-namespace": "docker-plugins",
  "data-root": "",
  "debug": true,
  "default-ulimits": {},
  "dns": [],
  "dns-opts": [],
  "dns-search": [],
  "exec-opts": [],
  "experimental": false,
  "features": {},
  "fixed-cidr": "",
  "group": "",
  "hosts": [],
  "insecure-registries": [],
  "labels": [],
  "log-driver": "",
  "log-level": "",
  "max-concurrent-downloads": 3,
  "max-concurrent-uploads": 5,
  "max-download-attempts": 5,
  "mtu": 0,
  "pidfile": "",
  "raw-logs": false,
  "registry-mirrors": [],
  "shutdown-timeout": 15,
  "storage-driver": "",
  "storage-opts": [],
  "swarm-default-advertise-addr": "",
  "tlscacert": "",
  "tlscert": "",
  "tlskey": "",
  "tlsverify": true
}

Feature options

The optional field features in daemon.json allows users to enable or disable specific daemon features. For example, {"features":{"buildkit": true}} enables buildkit as the default docker image builder.

当前支持的功能选项列表:

  • buildkit :当设置为true或禁用它时,它启用buildkit作为默认构建器false . 请注意,如果未在守护程序配置文件中明确设置此选项,则由 cli 决定调用哪个构建器.

Configuration reload behavior

有些选项可以在守护程序运行时重新配置,而无需重新启动进程. 我们在 Linux 中使用SIGHUP信号重新加载,在 Windows 中使用全局事件,键为Global\docker-daemon-config-$PID . 可以在配置文件中修改选项,但仍会检查与提供的标志的冲突. 如果存在冲突,守护程序将无法重新配置自身,但它不会停止执行.

当前支持的可以重新配置的选项列表如下:

  • debug :当设置为 true 时,它​​将守护进程更改为调试模式.
  • cluster-store :它使用新地址重新加载发现存储.
  • cluster-store-opts :它使用新选项重新加载发现存储.
  • cluster-advertise :它修改重新加载后公布的地址.
  • labels :它用一组新标签替换守护进程标签.
  • live-restore :启用在守护进程停机期间保持容器活动.
  • max-concurrent-downloads :它更新每次拉取的最大并发下载量.
  • max-concurrent-uploads :它更新每次推送的最大并发上传量.
  • max-download-attempts :它更新每次拉取的最大下载尝试次数.
  • default-runtime :如果在容器创建时未指定,它会更新要使用的运行时. 它默认为"默认",即官方 docker 软件包附带的运行时.
  • runtimes :它更新可用于运行容器的可用 OCI 运行时列表.
  • authorization-plugin :它指定要使用的授权插件.
  • allow-nondistributable-artifacts :用一组新的注册表替换守护程序将向其推送不可分发工件的注册表集.
  • insecure-registries :它用一组新的不安全注册表替换守护进程不安全注册表. 如果守护进程配置中的一些现有不安全注册表不在新重新加载的不安全注册表中,则这些现有的将从守护进程的配置中删除.
  • registry-mirrors :它用一组新的注册表镜像替换守护程序注册表镜像. 如果 daemon 配置中的某些现有注册表镜像不在新重新加载的注册表镜像中,则这些现有镜像将从 daemon 的配置中删除.
  • shutdown-timeout :它将守护进程的现有配置超时替换为关闭所有容器的新超时.
  • features :它明确启用或禁用特定功能.

更新和重新加载集群配置(例如--cluster-store--cluster-advertise--cluster-store-opts仅在之前未配置这些配置时才会生效. 如果--cluster-store已在 flags 中提供而cluster-advertise未提供,则可以在配置文件中添加cluster-advertise而不附带--cluster-store . 如果检测到先前配置的集群配置发生更改,配置重新加载将记录一条警告消息.

Run multiple daemons

Note:

在单个主机上运行多个守护进程被认为是"实验性的". 用户应注意未解决的问题. 在某些情况下,此解决方案可能无法正常工作. 解决方案目前正在开发中,并将在不久的将来交付.

本节介绍如何在单个主机上运行多个 Docker 守护进程. 要运行多个守护程序,您必须配置每个守护程序,使其不会与同一主机上的其他守护程序发生冲突. 您可以通过将它们作为标志提供或使用守护程序配置文件来设置这些选项.

必须为每个守护程序配置以下守护程序选项:

-b, --bridge=                          Attach containers to a network bridge
--exec-root=/var/run/docker            Root of the Docker execdriver
--data-root=/var/lib/docker            Root of persisted Docker data
-p, --pidfile=/var/run/docker.pid      Path to use for daemon PID file
-H, --host=[]                          Daemon socket(s) to connect to
--iptables=true                        Enable addition of iptables rules
--config-file=/etc/docker/daemon.json  Daemon configuration file
--tlscacert="~/.docker/ca.pem"         Trust certs signed only by this CA
--tlscert="~/.docker/cert.pem"         Path to TLS certificate file
--tlskey="~/.docker/key.pem"           Path to TLS key file

当您的守护程序对这些标志使用不同的值时,您可以在同一主机上运行它们而不会出现任何问题. 正确理解这些选项的含义并正确使用它们非常重要.

  • -b, --bridge=标志设置为docker0作为默认桥接网络. 它是在安装 Docker 时自动创建的. 如果您不使用默认值,则必须手动创建和配置网桥或将其设置为"无":-- --bridge=none
  • --exec-root是存储容器状态的路径. 默认值为/var/run/docker . 在此处指定正在运行的守护程序的路径.
  • --data-root是存储图像、卷和集群状态等持久数据的路径. 默认值为/var/lib/docker . 为避免与其他守护程序发生冲突,请为每个守护程序单独设置此参数.
  • -p, --pidfile=/var/run/docker.pid是存储守护进程ID的路径. 在此处指定 pid 文件的路径.
  • --host=[]指定 Docker 守护进程将在哪里侦听客户端连接. 如果未指定,则默认为/var/run/docker.sock .
  • --iptables=false阻止 Docker 守护进程添加 iptables 规则. 如果多个守护进程管理 iptables 规则,它们可能会覆盖另一个守护进程设置的规则. 请注意,禁用此选项需要您手动添加 iptables 规则以公开容器端口. 如果您阻止 Docker 添加 iptables 规则,即使您将--ip-masq设置为true ,Docker 也不会添加 IP 伪装规则. 如果没有 IP 伪装规则,Docker 容器在使用默认网桥以外的网络时将无法连接到外部主机或互联网.
  • --config-file=/etc/docker/daemon.json是存储配置文件的路径. 您可以使用它代替守护程序标志. 指定每个守护程序的路径.
  • --tls* Docker 守护程序支持--tlsverify模式,该模式强制执行加密和经过身份验证的远程连接. --tls*选项允许为各个守护进程使用特定证书.

没有网络的 Docker 守护程序的单独"引导"实例的示例脚本:

$ sudo dockerd \
        -H unix:///var/run/docker-bootstrap.sock \
        -p /var/run/docker-bootstrap.pid \
        --iptables=false \
        --ip-masq=false \
        --bridge=none \
        --data-root=/var/lib/docker-bootstrap \
        --exec-root=/var/run/docker-bootstrap
container, daemon, runtime

by  icopy.site