dockerd

守护 进程

Usage: dockerd [OPTIONS]

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
      --cdi-spec-dir list                     CDI specification directories to use
      --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 (not supported with cgroups v2)
      --cpu-rt-runtime int                    Limit the CPU real-time runtime in microseconds for the
                                              parent cgroup for all containers (not supported with cgroups v2)
      --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 "private")
      --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-network-opt mapmap            Default network options (default map[])
      --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
      --feature map                           Enable feature in the daemon
      --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
      --http-proxy string                     HTTP proxy URL to use for outgoing traffic
      --https-proxy string                    HTTPS proxy URL to use for outgoing traffic
      --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)
      --ip6tables                             Enable addition of ip6tables rules (experimental)
      --iptables                              Enable addition of iptables rules (default true)
      --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")
      --log-format string                     Set the logging format ("text"|"json") (default "text")
  -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 (default 3)
      --max-concurrent-uploads int            Set the max concurrent uploads (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 (default 1500)
      --network-control-plane-mtu int         Network Control plane MTU (default 1500)
      --no-new-privileges                     Set no-new-privileges by default for new containers
      --no-proxy string                       Comma-separated list of hosts or IP addresses for which the proxy is skipped
      --node-generic-resource list            Advertise user-defined resource
      --oom-score-adjust int                  Set the oom_score_adj for the daemon
  -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 registry mirror
      --rootless                              Enable rootless mode; typically used with RootlessKit
      --seccomp-profile string                Path to seccomp profile. Use "unconfined" to disable the default seccomp profile (default "builtin")
      --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
      --validate                              Validate daemon configuration and exit
  -v, --version                               Print version information and quit

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

描述

dockerd是管理容器的持久进程。Docker 对守护程序和客户端使用不同的Binaries。要运行守护进程,您需要 类型dockerd.

要使用 debug 输出运行守护进程,请使用dockerd --debug或添加"debug": truedaemon.json文件.

注意

启用实验性功能

通过启动dockerd使用--experimentalflag 或 adding"experimental": truedaemon.json文件。

环境变量

以下环境变量列表受dockerd守护 进程。 其中一些环境变量由 Docker Daemon 和 这docker请参阅 环境变量 以了解dockerCLI 的

变量描述
DOCKER_CERT_PATH身份验证密钥的位置。此变量由docker命令行界面dockerd守护 进程。
DOCKER_DRIVER要使用的存储驱动程序。
DOCKER_RAMDISK如果设置,则会禁用pivot_root.
DOCKER_TLS_VERIFY设置后,Docker 使用 TLS 并验证远程。此变量由docker命令行界面dockerd守护 进程。
DOCKER_TMPDIR守护程序创建的临时文件的位置。
HTTP_PROXYHTTP 请求的代理 URL,除非被 NoProxy 覆盖。有关详细信息,请参阅 Go 规范
HTTPS_PROXYHTTPS 请求的代理 URL,除非被 NoProxy 覆盖。有关详细信息,请参阅 Go 规范
MOBY_DISABLE_PIGZ禁用unpigz在拉取镜像时并行解压缩层,即使它已安装。
NO_PROXY逗号分隔值,指定应从代理中排除的主机。有关详细信息,请参阅 Go 规范

例子

代理配置

注意

如果您运行的是 Docker Desktop,请参阅 Docker Desktop 手册

如果您位于 HTTP 代理服务器后面,例如在公司设置中, 您可能必须配置 Docker 守护程序以使用 proxy server for 拉取和推送镜像等作。守护进程可以配置 以三种方式:

  1. 使用环境变量 (HTTP_PROXY,HTTPS_PROXYNO_PROXY).
  2. 使用http-proxy,https-proxyno-proxy字段(Docker Engine 版本 23.0 或更高版本)。
  3. 使用--http-proxy,--https-proxy--no-proxy命令行 选项。(Docker Engine 版本 23.0 或更高版本)。

命令行和配置文件选项优先于环境 变量。请参阅使用 systemd 控制和配置 Docker,以使用systemd.

守护程序套接字选项

Docker 守护进程可以通过三种不同类型的 Socket 监听 Docker 引擎 API 请求:unix,tcpfd.

默认情况下,unix域套接字(或 IPC 套接字)在/var/run/docker.sock,需要rootpermission 或docker群 会员。

如果需要远程访问 Docker 守护进程,则需要启用 tcp 插座。使用 TCP 套接字时,Docker 守护程序会提供未加密的 un-authenticated 直接访问 Docker 守护进程。您应该确保 守护进程使用内置的 HTTPS 加密套接字, 或者通过在它前面放置一个安全的 Web 代理。您可以在端口上监听2375在所有 网络接口-H tcp://0.0.0.0:2375或特定网络 接口使用其 IP 地址:-H tcp://192.168.59.103:2375.是的 常规使用端口2375对于 un-encrypted,和 port2376用于加密 与守护程序的通信。

注意

如果您使用的是 HTTPS 加密套接字,请记住,只有 支持 TLS 版本 1.0 及更高版本。SSLv3 及更低版本的协议不是 出于安全原因支持。

在基于 systemd 的系统上,您可以通过 systemd 套接字激活与守护进程通信。 跟dockerd -H fd://.用fd://适用于大多数设置,但 您还可以指定单个插槽:dockerd -H fd://3.如果 未找到指定的套接字激活文件,守护程序将退出。您可以 在 Docker 源代码树中查找将 systemd 套接字激活与 Docker 和 systemd 结合使用的示例。

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

下面的示例运行监听默认 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_PROXY,HTTPS_PROXYNO_PROXY环境变量(或其小写版本)。HTTPS_PROXY需要 优先于HTTP_PROXY.

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

$ docker -H ssh://me@example.com:22/var/run/docker.sock ps
$ 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.

将 Docker 绑定到另一个主机/端口或 Unix 套接字

警告

更改默认值docker守护进程绑定到 TCP 端口或 Unixdocker用户组会带来安全风险,因为它可能会让非 root 用户获得 主机上的 root 访问权限。确保您控制对docker.如果你是 绑定到 TCP 端口,则有权访问该端口的任何人都拥有完整的 Docker 访问;因此,不建议在开放网络上使用。

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

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

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

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

例如:

  • tcp://-> TCP 连接到127.0.0.1在任一端口上2376当 TLS 加密时 是 on 或 port2375当通信以纯文本形式进行时。
  • tcp://host:2375-> TCP 连接开启 主机:2375
  • tcp://host:2375/path-> TCP 连接开启 host:2375 并在所有请求之前添加路径
  • unix://path/to/socket-> Unix 插槽 在path/to/socket

-H,如果为空,则默认为 10 00 元 当 No-H被传递。

-H也接受 TCP 绑定的简短格式:host:host:port:port

以守护进程模式运行 Docker:

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

下载ubuntu镜像:

$ 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

守护进程存储驱动程序

在 Linux 上,Docker 守护程序支持多种不同的镜像层存储 司机:overlay2,fuse-overlayfs,btrfszfs.

overlay2是当前支持的所有 Linux 发行版的首选存储驱动程序, ,并默认处于选中状态。除非用户有充分的理由选择其他存储驱动程序,overlay2应该使用。

您可以在选择存储驱动程序中了解有关存储驱动程序以及如何选择一个驱动程序的更多信息。

在 Windows 上,Docker 守护程序仅支持windowsfilterstorage 驱动程序。

每个存储驱动程序的选项

可以使用--storage-opt标志。选项zfs入手zfsbtrfs入手btrfs.

ZFS 选项

zfs.fsname

指定守护进程创建其数据集时应使用的 ZFS 文件系统。 默认情况下,位于/var/lib/docker被使用。

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

Btrfs 选项

btrfs.min_space

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

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

Overlay2 选项

overlay2.size

设置容器的默认最大大小。仅当 backing filesystem 是xfs并挂载pquotamount 选项。在这些 条件,用户可以传递小于后备文件系统大小的任何大小。

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

Windowsfilter 选项

size

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

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

运行时选项

Docker 守护程序依赖于符合 OCI 标准的运行时 (通过containerddaemon) 作为其到 Linux 的接口 内核namespaces,cgroupsSELinux.

配置容器运行时

默认情况下,Docker 守护程序使用 runc 作为容器运行时。 您可以配置守护程序以添加其他运行时。

containerd shim 安装在PATH可以直接使用,无需 以编辑守护程序的配置。例如,如果您安装 Kata 容器 shim (containerd-shim-kata-v2) 打开PATH,则可以选择该 runtime 替换为docker run而无需编辑守护进程的配置:

$ docker run --runtime io.containerd.kata.v2

未实现 containerd 填充程序或 containerd 填充程序的容器运行时 安装在 外部PATH,必须通过 配置文件或使用--add-runtime命令行标志。

有关如何使用其他容器运行时的示例,请参阅替代容器运行时

使用 配置 runtimedaemon.json

使用守护程序的配置注册和配置容器运行时 文件中,将运行时作为条目添加到runtimes:

{
  "runtimes": {
    "<runtime>": {}
  }
}

条目的键 (<runtime>在前面的示例中)表示名称 的运行时。这是您在运行容器时引用的名称 用docker run --runtime <runtime>.

运行时条目包含一个对象,用于指定 运行。对象的属性取决于您的运行时类型 想要注册:

  • 如果运行时实现自己的 containerd 填充码,则该对象应包含 一个runtimeTypefield 和可选的options田。

    {
      "runtimes": {
        "<runtime>": {
          "runtimeType": "<name-or-path>",
          "options": {}
        }
      }
    }

    请参阅配置填充程序

  • 如果 runtime 被设计为 runc 的直接替代品, 该对象包含一个path字段和可选的runtimeArgs田。

    {
      "runtimes": {
        "<runtime>": {
          "path": "/path/to/bin",
          "runtimeArgs": ["...args"]
        }
      }
    }

    请参阅配置 runc 直接替换。

在配置文件中更改 runtimes 配置后, 您必须重新加载或重新启动守护进程才能使更改生效:

$ sudo systemctl reload dockerd
配置 containerd 填充程序

如果要注册的运行时实现了 containerd shim, 或者,如果要注册使用 runc shim 的运行时, 对运行时条目使用以下格式:

{
  "runtimes": {
    "<runtime>": {
      "runtimeType": "<name-or-path>",
      "options": {}
    }
  }
}

runtimeType指:

  • containerd shim 的完全限定名称。

    填充码的完全限定名称与runtime_type用于 在 containerd 的 CRI 配置中注册运行时。 例如io.containerd.runsc.v1.

  • containerd shim Binaries的路径。

    如果您在PATH.

options是可选的。它允许您指定运行时配置,以便 想要用于填充码。您可以在options取决于你正在注册的运行时。对于大多数垫片, 支持的配置选项包括TypeUrlConfigPath. 例如:

{
  "runtimes": {
    "gvisor": {
      "runtimeType": "io.containerd.runsc.v1",
      "options": {
        "TypeUrl": "io.containerd.runsc.v1.options",
        "ConfigPath": "/etc/containerd/runsc.toml"
      }
    }
  }
}

您可以使用相同的 runtimeType 配置多个运行时。例如:

{
  "runtimes": {
    "gvisor-foo": {
      "runtimeType": "io.containerd.runsc.v1",
      "options": {
        "TypeUrl": "io.containerd.runsc.v1.options",
        "ConfigPath": "/etc/containerd/runsc-foo.toml"
      }
    },
    "gvisor-bar": {
      "runtimeType": "io.containerd.runsc.v1",
      "options": {
        "TypeUrl": "io.containerd.runsc.v1.options",
        "ConfigPath": "/etc/containerd/runsc-bar.toml"
      }
    }
  }
}

optionsfield 在使用时接受一组特殊的配置参数 跟"runtimeType": "io.containerd.runc.v2".有关 runc 的更多信息 参数,请参阅 CRI 插件配置指南 中的 runc 配置部分。

配置 runc 直接替换

如果要注册的运行时可以用作 runc 中,你可以使用 daemon 配置文件注册运行时。 或使用--add-runtimeflag 的dockerdcli 中。

使用配置文件时,该条目使用以下格式:

{
  "runtimes": {
    "<runtime>": {
      "path": "/path/to/binary",
      "runtimeArgs": ["...args"]
    }
  }
}

哪里path是运行时可执行文件的绝对路径,或者是名称 的可执行文件安装在PATH:

{
  "runtimes": {
    "runc": {
      "path": "runc"
    }
  }
}

runtimeArgs允许您选择将其他参数传递给运行时。 具有此格式的条目使用 containerd runc shim 调用自定义 runtime Binaries。

当您使用--add-runtimeCLI 标志,请使用以下格式:

$ sudo dockerd --add-runtime <runtime>=<path>

不支持通过命令行定义运行时参数。

有关 runc 直接替换的示例配置,请参阅 youki >替代容器运行时

配置默认容器运行时

您可以指定完全限定的 containerd 运行时 shim 的名称, 或已注册运行时的名称。您可以指定默认运行时 使用守护进程配置文件,或使用--default-runtime的标志 这dockerdcli 中。

使用配置文件时,该条目使用以下格式:

{
  "default-runtime": "io.containerd.runsc.v1"
}

当您使用--default-runtimeCLI 标志,请使用以下格式:

$ dockerd --default-runtime io.containerd.runsc.v1

运行 containerd standalone

默认情况下,Docker 守护程序会自动启动containerd.如果您想 控制containerd启动, 手动启动containerd并将路径传递给 这containerdsocket 使用--containerd旗。例如:

$ sudo dockerd --containerd /run/containerd/containerd.sock

配置 cgroup 驱动程序

您可以使用--exec-opt native.cgroupdriverCLI 标志。

您只能指定cgroupfssystemd.如果指定systemd并且它不可用,系统出错。如果省略native.cgroupdriver选择 cgroupfs在 cgroup v1 主机上使用,systemd在具有 systemd 可用的 cgroup v2 主机上使用。

此示例将cgroupdriversystemd:

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

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

配置容器隔离技术 (Windows)

对于 Windows 容器,您可以指定默认容器隔离 技术使用,使用--exec-opt isolation旗。

以下示例使hyperv默认的隔离技术:

> dockerd --exec-opt isolation=hyperv

如果在守护程序启动时未指定隔离值,则在 Windows 客户端上, 默认值为hyperv,在 Windows 服务器上,默认值为process.

守护程序 DNS 选项

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

$ sudo dockerd --dns 8.8.8.8

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

$ sudo dockerd --dns-search example.com

允许推送不可分发的项目

某些镜像(例如,Windows 基础镜像)包含其分布为 受许可证限制。当这些镜像被推送到注册表时,受限 不包括伪像。

要覆盖特定注册表的此行为,请使用--allow-nondistributable-artifacts选项中:

  • --allow-nondistributable-artifacts myregistry:5000告诉 Docker 守护程序 将不可分发的构件推送到 myRegistry:5000。
  • --allow-nondistributable-artifacts 10.1.0.0/16告诉 Docker 守护程序 将不可分发的构件推送到解析的 IP 地址 位于 CIDR 语法描述的子网内。

此选项可以多次使用。

在推送包含不可分发构件的镜像时,此选项非常有用 添加到气隙网络上的 registry 中,以便该网络上的主机可以提取 镜像,而无需连接到其他服务器。

警告

不可分发的工件通常对 以及它们可以分发和共享的位置。只使用此功能推送 工件复制到私有注册表中,并确保您遵守 涵盖重新分发不可分发构件的任何术语。

不安全的注册表

在本节中,“注册表”是指私有注册表,而myregistry:5000是私有注册表的占位符示例。

Docker 认为私有注册表要么安全,要么不安全。 安全注册表使用 TLS,其 CA 证书的副本放置在 Docker 主机位于/etc/docker/certs.d/myregistry:5000/ca.crt.一个不安全 registry 未使用 TLS(即侦听纯文本 HTTP),或者 将 TLS 与 Docker 守护程序未知的 CA 证书一起使用。后者可以 当在/etc/docker/certs.d/myregistry:5000/,或者如果证书验证 失败(即错误的 CA)。

默认情况下,Docker 假定所有注册表都是安全的,但本地注册表除外。 无法与不安全的注册表通信 如果 Docker 假定注册表是安全的。为了与 insecure 注册表,Docker 守护程序需要--insecure-registry在其中一个 以下两种形式:

  • --insecure-registry myregistry:5000告诉 Docker 守护程序 myregistry:5000 应被视为不安全。
  • --insecure-registry 10.1.0.0/16告诉 Docker 守护程序所有注册表 其域解析为 IP 地址是 CIDR 语法,应被视为不安全。

该标志可以多次使用,以允许标记多个注册中心 作为不安全。

如果不安全的注册表未标记为不安全,则docker pull,docker pushdocker search导致出现错误消息, 提示 用户保护或通过--insecure-registry标志添加到 Docker daemon 中。

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

使--insecure-registry,即允许 un-encrypted 和/或 untrusted 通信,在运行本地注册表时非常有用。然而 因为它的使用会产生安全漏洞,所以它只应针对 测试目的。为了提高安全性,用户应将其 CA 添加到其 系统的受信任 CA 列表,而不是启用--insecure-registry.

旧版注册表

不再对仅支持旧版 v1 协议的注册管理机构执行作 支持。具体来说,守护程序不会尝试推送、拉取或登录 添加到 v1 注册表。例外情况是search仍然可以执行 在 v1 注册表上。

在 HTTPS_PROXY 后面运行 Docker 守护程序

当在使用HTTPSproxy,代理的证书 替换 Docker Hub 的证书。这些证书必须添加到您的 Docker 主机的配置:

  1. 安装ca-certificates发行版的软件包
  2. 向您的网络管理员索取代理的 CA 证书,并将其附加到/etc/pki/tls/certs/ca-bundle.crt
  3. 然后用HTTPS_PROXY=http://username:password@proxy:port/ dockerd. 这username:password@是可选的 - 并且仅当您的 代理设置为需要身份验证。

这只会将代理和身份验证添加到 Docker 守护程序的请求中。 要在构建镜像和运行容器时使用代理,请参阅配置 Docker 以使用代理服务器

违约ulimit设置

--default-ulimitflag 允许您设置默认的ulimit用于的选项 所有容器。它采用与--ulimitdocker run.如果 这些默认值未设置,ulimit设置继承自 Docker 守护程序。 任何--ulimit传递给docker run覆盖守护进程默认值。

小心设置nproc使用ulimitflag 的nproc由 Linux 设计,旨在 设置用户(而不是容器)可用的最大进程数。 有关详细信息,请参阅docker run参考.

访问授权

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

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

PLUGIN_IDvalue 是插件的名称或其规范的路径 文件。插件的实现决定了您是可以指定 name 还是 路径。请咨询您的 Docker 管理员以获取有关 插件。

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

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

守护程序用户命名空间选项

Linux 内核用户命名空间支持通过启用进程(即容器 具有唯一范围的用户 ID 和组 ID,这些 ID 位于传统 ID 之外 主机系统使用的 user 和 group 范围。最重要的之一 安全性改进是,默认情况下,容器进程作为root用户具有预期的管理权限(有一些限制) 中,但实际上会映射到非特权的uid上 主机。

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

配置主机网关 IP

Docker 守护程序支持特殊的host-gateway--add-hostflag 的docker rundocker build命令。此值解析为 主机的网关 IP,并允许容器连接到在 主机。

默认情况下,host-gateway解析为默认网桥的 IP 地址。 您可以将其配置为使用--host-gateway-ip标志,或者host-gateway-ip键入 守护进程配置文件。

$ cat > /etc/docker/daemon.json
{ "host-gateway-ip": "192.0.2.0" }
$ sudo systemctl restart docker
$ docker run -it --add-host host.docker.internal:host-gateway \
  busybox ping host.docker.internal 
PING host.docker.internal (192.0.2.0): 56 data bytes

启用 CDI 设备

注意

这是实验性功能,因此不代表稳定的 API。

默认情况下,此功能未启用。对于此功能,请将features.cditruedaemon.json配置文件。

容器设备接口 (CDI) 是一种标准化机制,供容器运行时创建能够 与第三方设备交互。

Docker 守护程序支持使用 CDI 设备运行容器(如果请求 设备规范可在守护进程的文件系统上找到。

默认规范控制器为:

  • /etc/cdi/对于静态 CDI 规范
  • /var/run/cdi对于生成的 CDI 规范

或者,您可以使用cdi-spec-dirs选项中的daemon.json配置文件或--cdi-spec-dirflag 的dockerdCLI 的

{
  "features": {
     "cdi": true
  },
  "cdi-spec-dirs": ["/etc/cdi/", "/var/run/cdi"]
}

为守护程序启用 CDI 后,您可以查看配置的 CDI 规范 目录使用docker info命令。

守护程序日志记录格式

--log-format选项或 “log-format” 选项允许您设置守护程序生成的日志的格式。日志记录格式应 只能通过--log-format命令行选项或 通过配置文件中的 “log-format” 字段;同时使用 配置中的 command-line 选项和 “log-format” 字段 文件生成错误。如果未设置此选项,则默认值为 “text”。

以下示例通过--log-format命令 line 选项来使用json格式化日志;

$ dockerd --log-format=json
# ...
{"level":"info","msg":"API listen on /var/run/docker.sock","time":"2024-09-16T11:06:08.558145428Z"}

以下示例显示了daemon.json配置文件中的 “log-format” 集;

{
  "log-format": "json"
}

其他选项

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

Docker 支持 Docker 数据目录 (/var/lib/docker) 和 为/var/lib/docker/tmp.这DOCKER_TMPDIR并且 data 目录可以是 设置如下:

$ export DOCKER_TMPDIR=/mnt/disk2/tmp
$ sudo -E dockerd --data-root /var/lib/docker -H unix://

默认 cgroup 父级

--cgroup-parentoption 允许您设置默认的 cgroup 父级 用于容器。如果未设置此选项,则默认为/docker为 cgroupfs 驱动程序,以及system.slice对于 systemd cgroup 驱动程序。

如果 cgroup 具有前导正斜杠 (),则会创建 cgroup 在根 cgroup 下,否则在 daemon 下创建 cgroup cgroup 的/

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

systemd cgroup 驱动程序对--cgroup-parent.systemd 系统 按切片表示层次结构,切片的名称对 树。所以--cgroup-parent对于 systemd cgroups 应为切片名称。一个 name 可以由一系列以破折号分隔的名称组成,用于描述路径 从根切片到切片。例如--cgroup-parent=user-a-b.slice表示容器的内存 cgroup 是在/sys/fs/cgroup/memory/user.slice/user-a.slice/user-a-b.slice/docker-<id>.scope.

此设置也可以按容器设置,使用--cgroup-parent选项docker createdocker run,并优先于 这--cgroup-parent选项。

守护程序指标

--metrics-addr选项采用 TCP 地址来提供指标 API。 此功能仍处于实验阶段,因此,守护进程必须在 experimental 中运行 模式,以便此功能正常工作。

要在 上提供指标 APIlocalhost:9323您可以指定--metrics-addr 127.0.0.1:9323, 允许您在 API 上发出请求127.0.0.1:9323/metrics以接收 Prometheus 格式的指标。

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

如果您运行的是 Prometheus 服务器,则可以将此地址添加到您的抓取配置中 让 Prometheus 在 Docker 上收集指标。有关更多信息,请参阅使用 Prometheus 收集 Docker 指标

Node 通用资源

--node-generic-resourcesoption 接受 key-value 的列表 对 (key=value),允许您公布用户定义的资源 在 Swarm 集群中。

当前预期用例是公布 NVIDIA GPU,以便服务 请求NVIDIA-GPU=[0-16]可以降落在具有足够 GPU 的节点上 要运行的任务。

用法示例:

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

在守护进程中启用功能 (--feature)

--featureoption 允许您启用或禁用守护程序中的功能。 此选项对应于 daemon.json 配置文件中的 “features” 字段。 功能只能通过--feature命令行 选项或通过配置文件中的“features”字段;同时使用 命令行选项和配置中的 “features” 字段 文件生成错误。可以多次指定 feature 选项 以配置多个功能。这--featureoption 接受 name 和 可选布尔值。省略该值时,默认值为true.

以下示例使用cdicontainerd-snapshotter已启用功能。这cdioption 中提供了一个值;

$ dockerd --feature cdi=true --feature containerd-snapshotter

以下示例是使用daemon.json配置 文件;

{
  "features": {
    "cdi": true,
    "containerd-snapshotter": true
  }
}

守护程序配置文件

--config-fileoption 允许您设置任何配置选项 对于 JSON 格式的守护程序。此文件使用与键相同的标志名称, 除了允许多个条目的标志外,它使用复数 的标志名称,例如labels对于label旗。

配置文件中设置的选项不得与设置的选项冲突 using flags 的 Flags 中。如果 Docker 守护程序之间的选项重复,则无法启动 文件和标志,无论它们的值如何。这是有意为之,并避免了 静默忽略 configuration reloaded 中引入的更改。 例如,如果您设置了守护程序标签,则守护程序将无法启动 ,并通过--label旗。 守护程序启动时,将忽略文件中不存在的选项。

--validate选项允许在没有 启动 Docker 守护程序。返回无效的非零退出代码 配置文件。

$ dockerd --validate --config-file=/tmp/valid-config.json
configuration OK

$ echo $?
0

$ dockerd --validate --config-file /tmp/invalid-config.json
unable to configure the Docker daemon with file /tmp/invalid-config.json: the following directives don't match any configuration option: unknown-option

$ echo $?
1
在 Linux 上

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

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

{
  "allow-nondistributable-artifacts": [],
  "api-cors-header": "",
  "authorization-plugins": [],
  "bip": "",
  "bridge": "",
  "builder": {
    "gc": {
      "enabled": true,
      "defaultKeepStorage": "10GB",
      "policy": [
        { "keepStorage": "10GB", "filter": ["unused-for=2200h"] },
        { "keepStorage": "50GB", "filter": ["unused-for=3300h"] },
        { "keepStorage": "100GB", "all": true }
      ]
    }
  },
  "cgroup-parent": "",
  "containerd": "/run/containerd/containerd.sock",
  "containerd-namespace": "docker",
  "containerd-plugins-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-network-opts": {},
  "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": {
    "cdi": true,
    "containerd-snapshotter": true
  },
  "fixed-cidr": "",
  "fixed-cidr-v6": "",
  "group": "",
  "host-gateway-ip": "",
  "hosts": [],
  "proxies": {
    "http-proxy": "http://proxy.example.com:80",
    "https-proxy": "https://proxy.example.com:443",
    "no-proxy": "*.test.example.com,.example.org"
  },
  "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-format": "text",
  "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": 0,
  "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": ""
}

注意

您无法在daemon.json已经设置好的 daemon startup 作为标志。 在使用 systemd 启动 Docker 守护程序的系统上,-H已设置,因此 您不能使用hosts键入daemon.json以添加侦听地址。 有关如何使用 systemd drop-in 文件配置守护程序的示例,请参阅自定义 Docker 守护程序选项

在 Windows 上

配置文件在 Windows 上的默认位置是%programdata%\docker\config\daemon.json.使用--config-file旗 以指定非默认位置。

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

{
  "allow-nondistributable-artifacts": [],
  "authorization-plugins": [],
  "bridge": "",
  "containerd": "\\\\.\\pipe\\containerd-containerd",
  "containerd-namespace": "docker",
  "containerd-plugins-namespace": "docker-plugins",
  "data-root": "",
  "debug": true,
  "default-network-opts": {},
  "default-runtime": "",
  "default-ulimits": {},
  "dns": [],
  "dns-opts": [],
  "dns-search": [],
  "exec-opts": [],
  "experimental": false,
  "features": {},
  "fixed-cidr": "",
  "group": "",
  "host-gateway-ip": "",
  "hosts": [],
  "insecure-registries": [],
  "labels": [],
  "log-driver": "",
  "log-format": "text",
  "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
}

default-runtime选项默认未设置,在这种情况下,dockerd 会自动检测运行时。 此检测基于是否containerd标志。

接受的值:

  • com.docker.hcsshim.v1- 这是自首次添加 Windows 支持 Docker 以来一直使用的内置运行时,并在 Windows 中使用 v1 HCS API。
  • io.containerd.runhcs.v1- 这是使用 containerdrunhcsshim 运行容器,并在 Windows 中使用 v2 HCS API。

功能选项

可选字段featuresdaemon.json允许您启用或禁用特定 守护进程功能。

{
  "features": {
    "some-feature": true,
    "some-disabled-feature-enabled-by-default": false
  }
}

功能选项列表包括:

  • containerd-snapshotter:设置为true,守护程序使用 containerd snapshotters 而不是用于存储镜像和 容器数据。有关更多信息,请参阅 containerd 存储

  • windows-dns-proxy:设置为true、守护程序的内部 DNS 解析器 将请求转发到外部服务器。如果没有这个,大多数应用程序 在容器中运行仍将能够使用辅助 DNS 服务器 配置在容器本身中,但nslookup将无法解决 外部名称。当前默认值为false,它将更改为true在 未来版本。此选项仅在 Windows 上允许。

    警告

    windows-dns-proxy功能标志将在将来的发行版中删除。

配置重新加载行为

当守护进程运行时,可以重新配置某些选项,而无需 以重新启动进程。守护进程使用SIGHUPsignal 重新加载, 以及 Windows 中的全局事件,其中键为Global\docker-daemon-config-$PID. 您可以修改配置文件中的选项,但守护进程仍会 检查设置是否与指定的 CLI 标志冲突。守护程序失败 如果存在冲突,则重新配置自身,但它不会停止执行。

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

选择描述
debug切换守护进程的调试模式。
labels将守护程序标签替换为一组新标签。
live-restore切换实时还原
max-concurrent-downloads配置每次拉取的最大并发下载量。
max-concurrent-uploads配置每次推送的最大并发上传数。
max-download-attempts配置每次拉取的最大下载尝试次数。
default-runtime如果在创建容器时指定了 not,则配置要使用的运行时。
runtimes配置可用于运行容器的可用 OCI 运行时列表。
authorization-plugin指定要使用的授权插件。
allow-nondistributable-artifacts指定守护程序将不可分发构件推送到的注册表列表。
insecure-registries指定守护程序应视为不安全的注册表列表。
registry-mirrors指定 Registry 镜像列表。
shutdown-timeout使用新的超时来配置守护程序的现有配置超时,以关闭所有容器。
features启用或禁用特定功能。

运行多个守护进程

注意

在单个主机上运行多个守护进程被视为实验性作。 您可能会遇到未解决的问题,并且在某些情况下事情可能无法按预期进行。

本节介绍如何在单个主机上运行多个 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=flag 设置为docker0作为默认桥接网络。 它是在安装 Docker 时自动创建的。 如果您不使用默认值,则必须手动创建和配置网桥,或将其设置为“none”:--bridge=none
  • --exec-root是存储容器状态的路径。 默认值为/var/run/docker. 在此处指定正在运行的守护程序的路径。
  • --data-root是持久化数据(如镜像、卷和 cluster 状态。默认值为/var/lib/docker.为避免任何 conflict with other daemon 时,请为每个守护进程单独设置此参数。
  • -p, --pidfile=/var/run/docker.pid是守护进程的进程 ID 的存储路径。 在此处指定 PID 文件的路径。
  • --host=[]指定 Docker 守护程序侦听客户端连接的位置。 如果未指定,则默认为/var/run/docker.sock.
  • --iptables=false阻止 Docker 守护程序添加 iptables 规则。如果 多个守护进程管理 iptables 规则,它们可能会覆盖另一个守护进程设置的规则 守护 进程。请注意,禁用此选项需要您手动添加 iptables 规则来公开容器端口。如果您阻止 Docker 添加 iptables 规则,Docker 也不会添加 IP 伪装规则,即使你设置了--ip-masqtrue.如果没有 IP 伪装规则,Docker 容器就无法 使用默认网桥以外的网络时连接到外部主机或 Internet。
  • --config-file=/etc/docker/daemon.json是配置文件的存储路径。 您可以使用它来代替守护进程标志。指定每个守护程序的路径。
  • --tls*Docker 守护程序支持--tlsverify强制执行加密和身份验证的远程连接的模式。 这--tls*options 允许对单个守护程序使用特定证书。

没有网络的 Docker 守护程序的单独 “bootstrap” 实例的示例脚本:

$ 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

默认网络选项

default-network-opts键中的daemon.json配置文件和 等效--default-network-optCLI 标志,允许您指定 驱动程序网络 新网络的驱动程序选项。

以下示例显示如何为bridge司机 使用daemon.json文件。

{
  "default-network-opts": {
    "bridge": {
      "com.docker.network.bridge.host_binding_ipv4": "127.0.0.1",
      "com.docker.network.driver.mtu": "1234"
    }
  }
}

此示例使用bridge网络驱动程序。请参阅桥接网络驱动程序页面,了解可用驱动程序选项的概述。

更改配置并重新启动守护程序后,新的 您创建使用这些选项配置作为默认值。

$ docker network create mynet
$ docker network inspect mynet --format "{{json .Options}}"
{"com.docker.network.bridge.host_binding_ipv4":"127.0.0.1","com.docker.network.driver.mtu":"1234"}

请注意,更改此守护进程配置不会影响预先存在的 网络。

使用--default-network-optCLI 标志可用于测试和调试 目的,但您应该更喜欢使用daemon.jsonfile 表示持久 守护程序配置。CLI 标志需要具有以下格式的值:driver=opt=value例如:

$ sudo dockerd \
  --default-network-opt bridge=com.docker.network.bridge.host_binding_ipv4=127.0.0.1 \
  --default-network-opt bridge=com.docker.network.driver.mtu=1234