Dockerd启动参数详解

dockerd是管理容器的持久化进程。Docker为守护程序和客户端使用不同的二进制文件。dockerd 守护进程的配置方式有两种:

  1. 配置文件
  2. 启动参数

配置文件详细官方说明: dockerd

环境变量 以下环境变量受守护进程支持。其中一些环境变量同时受 Docker 守护进程和CLI 支持。请参阅环境变量以了解守护进程支持的环境变量CLI.

变量 描述
DOCKER_CERT_PATH 身份验证密钥的位置。此变量同时由CLI和守护进程使用。
DOCKER_DRIVER 要使用的存储驱动程序。
DOCKER_RAMDISK If set this disables pivot_root.
DOCKER_TLS_VERIFY 当设置Docker使用TLS并验证远程时,此变量同时被CLI和守护进程使用。
DOCKER_TMPDIR 守护进程创建的临时文件的位置。
HTTP_PROXY Proxy URL for HTTP requests unless overridden by NoProxy. See the Go specification for details.
HTTPS_PROXY HTTPS 请求的代理 URL,除非被 NoProxy 覆盖。有关详细信息,请参阅Go 规范。
MOBY_DISABLE_PIGZ 即使已安装,也禁用在拉取镜像时并行解压缩层的功能。
NO_PROXY 以逗号分隔的值,用于指定应从代理中排除的主机。有关详细信息,请参阅Go 规范。

data-root

Docker的数据持久化存储的根目录存储镜像、Volume和集群状态等持久化数据的路径,也是Docker最消耗磁盘存储的目录。默认值为 /var/lib/docker

data-root 支持两种设置方式:

  1. daemon.json配置
    {
        "data-root": "/data/docker",
    }
    
  2. 命令行选项
    dockerd --data-root /data/docker
    

DOCKER_TMPDIR 临时文件目录

守护进程创建的临时文件的位置,可以通过环境变量 DOCKER_TMPDIR 进行配置。

如果通过命令行前台启动 dockerd 服务,可以通过 export 声明环境变量

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

如果 dockerd 是通过 systemd 后台启动,需要自定义修改 /etc/systemd/system/docker.service 或者使用 /etc/systemd/system/docker.service.d/override.conf

[Service]
Environment="DOCKER_TMPDIR=/mnt/disk2/tmp"

代理配置 PROXY

如果您位于 HTTP 代理服务器之后,例如在企业环境中,您可能需要配置 Docker 守护进程,以便在执行拉取和推送镜像等操作时使用该代理服务器。

可以通过三种方式配置守护进程:

  • 环境变量

(HTTP_PROXY, HTTPS_PROXY, 和NO_PROXY).

  • daemon.json配置

使用http-proxy, https-proxy, 和no-proxy字段在守护进程配置文件中(Docker 引擎版本 23.0 或更高版本)。

  • 命令行选项

使用–http-proxy, –https-proxy, 和–no-proxy命令行选项。(Docker 引擎版本 23.0 或更高版本)。 命令行和配置文件选项优先于环境变量。请参阅使用 systemd 控制和配置 Docker以在主机上设置这些环境变量systemd.

守护进程套接字 Sockets

Docker 守护程序可通过三种不同类型的套接字监听 Docker 引擎 API请求:unix, tcp, 和 fd.

默认情况下,会在 创建一个域套接字(或 IPC 套接字),这需要具备 或组成员身份。

TCP Sockets

如果您需要远程访问 Docker 守护程序,需要启用 TCP 套接字。

使用 TCP 套接字时,Docker 守护程序默认提供未加密且未经过身份验证的直接访问权限。可以通过以下方式保护该守护程序:

  1. 内置HTTPS加密套接字
  2. 或在其前面放置一个安全的Web代理。
sudo dockerd -H tcp://192.168.59.106 

您可以监听端口在所有网络接口上,也可以使用其IP地址在特定的网络接口上监听:通常使用端口用于未加密,以及端口用于与守护程序的加密通信。

Unix Sockets

在基于systemd的系统上,您可以通过systemd套接字激活与守护进程通信,使用即可适用于大多数设置,但您也可以指定单个套接字:如果未找到指定的套接字激活文件,守护进程将退出。您可以在中找到使用systemd套接字激活与Docker和systemd的示例。Docker 源代码树.

您可以配置 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 -H tcp://0.0.0.0:2375 ps
或者
export DOCKER_HOST="tcp://0.0.0.0:2375"
docker ps

将环境变量设置为非空字符串以外的任何值,等同于设置标志。以下内容等效:

docker --tlsverify ps
或者
export DOCKER_TLS_VERIFY=1
docker ps

Docker 客户端会优先考虑HTTP_PROXY, HTTPS_PROXY, 和NO_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 套接字 警告 将默认守护进程绑定到 TCP 端口或 Unix用户组会带来安全风险,因为这可能允许非 root 用户获取主机上的 root 访问权限。请务必控制对的访问。如果您绑定到 TCP 端口,则任何有权访问该端口的人都将拥有完整的 Docker 访问权限;因此,在开放网络上并不建议使用。

借助-H它,可以将Docker守护进程配置为监听特定的IP和端口。默认情况下,它会监听unix:///var/run/docker.sock以仅允许root用户进行本地连接。您可以将其设置为0.0.0.0:2375或特定主机IP,以便向所有人开放访问权限,但不建议这样做,因为这可能导致攻击者获取运行该守护进程的主机的root权限。

Similarly, the Docker client can use -H to connect to a custom port. The Docker client defaults to connecting to unix:///var/run/docker.sock on Linux, and tcp://127.0.0.1:2376 on Windows.

-H accepts host and port assignment in the following format:


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

例如:

tcp://-> TCP连接到127.0.0.1任一端口2376,当启用TLS加密时;或端口2375,当通信为明文时。
tcp://host:2375-> 主机上的TCP连接:2375
tcp://host:2375/path-> 主机上的TCP连接:2375,并为所有请求添加路径前缀
unix://path/to/socket-> 位于的Unix套接字path/to/socket

-H,当为空时,默认值与未传入时相同。-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

存储驱动 driver

在 Linux 上,Docker 守护程序支持多种不同的镜像层存储驱动程序:overlay2, fuse-overlayfs, btrfs, 和 zfs.

overlay2 是当前所有受支持的Linux发行版的首选存储驱动程序,默认就是 overlay2,除非用户有充分理由偏好其他存储驱动程序.

您可以在选择存储驱动程序.

在 Windows 上,Docker 守护程序仅支持 windowsfilter 存储驱动程序。

可以通过三种方式配置存储驱动,建议通过 daemon.json 配置管理:

  • 环境变量方式

通过在 docker.service 文件中设置 DOCKER_DRIVER 环境变量来设置存储驱动程序。

DOCKER_DRIVER|要使用的存储驱动程序

  • daemon.json方式

  • 命令行选项方式

每个存储驱动程序的选项

特定存储驱动程序可使用标志指定的选项进行配置。用于的选项以开头,用于的选项为。

ZFS选项

zfs.fsname 指定守护进程应使用的ZFS文件系统以创建其数据集。默认情况下,使用/var/lib/docker中的ZFS文件系统。

示例

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

Btrfs选项

btrfs.min_space

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

示例

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

overlay2

overlay2.size 设置容器的默认最大大小。仅当后备文件系统xfs已挂载且使用pquota挂载选项时才受支持。在这些条件下,用户可指定小于后备文件系统大小的任何大小。

示例

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

Windowsfilter选项

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

示例

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

运行时选项

Docker守护进程依赖于符合OCI标准的运行时(通过containerd守护进程)作为其与Linux内核的接口namespaces, cgroups,和SELinux.

配置容器运行时

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

安装在PATH上的 containerd shims 可直接使用,无需编辑守护进程的配置。例如,如果您在containerd-shim-kata-v2上安装了 Kata Containers shim(PATH),则可直接通过docker run选择该运行时,而无需编辑守护进程的配置:

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

未实现 containerd shim 的容器运行时,或安装在之外的 containerd shim,必须通过配置文件或使用命令行标志向守护进程注册。

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

使用以下方式配置运行时daemon.json

要使用守护程序的配置文件注册和配置容器运行时,请在runtimes:

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

条目的键(在上一个示例中)表示运行时的名称。这是您在运行容器时所引用的名称,使用docker run –runtime .

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

如果运行时实现了自己的 containerd shim,则该对象应包含一个runtimeType字段和一个可选的options字段。

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

请参阅配置shim.

如果运行时旨在作为runc的直接替换,该对象包含一个path字段,以及一个可选runtimeArgs字段。

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

请参阅配置 runc 下拉替换项.

在配置文件中更改运行时配置后,您必须重新加载或重启守护进程,以使更改生效:

 sudo systemctl reload dockerd

配置containerd shim 如果您要注册的运行时实现了一个containerd shim,或者您想注册一个使用runc shim的运行时,请按照以下格式配置运行时条目:

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

runtimeType refers to either:

A fully qualified name of a containerd shim.

The fully qualified name of a shim is the same as the runtime_type used to register the runtime in containerd’s CRI configuration. For example, io.containerd.runsc.v1.

containerd shim 二进制文件的路径。

如果您在PATH.

options是可选的。它允许您指定要用于 shim 的运行时配置。您可在options中指定的配置参数取决于您正在注册的运行时。对于大多数 shim,支持的配置选项为TypeUrl和ConfigPath。例如:

{
  "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"
      }
    }
  }
}

该字段在与options配合使用时,需要一组特殊的配置参数。“runtimeType”: “io.containerd.runc.v2"有关 runc 参数的更多信息,请参阅CRI 插件配置指南.

配置 runc 替换项

如果您想要注册的运行时可作为 runc 的直接替代品,您可以使用守护进程配置文件或使用–add-runtimecli 的标志dockerd来注册该运行时。

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

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

其中path是运行时可执行文件的绝对路径,或已安装在PATH:

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

并且runtimeArgs允许您选择性地向运行时传递其他参数。采用此格式的条目使用containerd runc shim调用自定义运行时二进制文件。

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

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

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

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

配置默认容器运行时 您可以指定完全限定的 containerd 运行时 shim 的名称,也可以指定已注册运行时的名称。您可以通过守护进程配置文件或通过–default-runtimecli 的标志dockerd来指定默认运行时。

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

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

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

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

以独立模式运行containerd 默认情况下,Docker守护进程会自动启动。如果您想控制启动,可手动启动并使用标志传递套接字的路径。例如:

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

Configure cgroup driver You can configure how the runtime should manage container cgroups, using the –exec-opt native.cgroupdriver CLI flag.

您只能指定cgroupfs或systemd。如果您指定systemd且该选项不可用,系统将报错。如果您省略native.cgroupdriver选项,则在 cgroup v1 主机上使用 cgroupfs,在具有 systemd 的 cgroup v2 主机上使用systemd。

此示例将cgroupdriver设置为systemd:

 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

不安全的镜像仓库 Registry

在本节中,“registry”指代私有注册表,myregistry:5000并作为私有注册表的占位符示例。

Docker 将私有注册表视为安全或不安全。安全的注册表使用 TLS,其 CA 证书的副本会放置在 Docker 主机上。/etc/docker/certs.d/myregistry:5000/ca.crt不安全的注册表要么未使用 TLS(即通过明文 HTTP 监听),要么虽使用了 TLS,但其 CA 证书并未被 Docker 守护程序所识别。后者可能发生在未找到证书的情况下/etc/docker/certs.d/myregistry:5000/,或证书验证失败时(即 CA 错误)。

默认情况下,Docker 假定所有注册表都是安全的,本地注册表除外。如果 Docker 假定某个注册表是安全的,则无法与该不安全注册表通信。为了与不安全注册表通信,Docker 守护进程需要以下两种形式之一:

--insecure-registry myregistry:5000告知 Docker 守护程序,myregistry:5000 应被视为不安全。
--insecure-registry 10.1.0.0/16会告知 Docker 守护程序,所有域名解析为 IP 地址的注册表都属于由 CIDR 语法描述的子网,应被视为不安全。

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

如果未标记为不安全的注册表docker pull, docker push,并且docker search导致出现错误消息,提示用户要么使该注册表安全,要么将–insecure-registry标志传递给 Docker 守护程序,如上文所述。

自 Docker 1.3.2 起,本地注册表的 IP 地址若位于 127.0.0.0/8 范围内,将被自动标记为不安全。不建议依赖此行为,因为它未来可能会发生变化。

启用–insecure-registry,即允许未加密和/或不受信任的通信,在运行本地注册表时可能很有用。但由于启用该功能会带来安全漏洞,因此仅应将其用于测试目的。为提高安全性,用户应将自身的CA添加到系统受信任CA列表中,而非启用–insecure-registry.

旧版注册表 现已不再支持针对仅支持旧版 v1 协议的注册表的操作。具体而言,守护程序不会尝试向 v1 注册表推送、拉取或登录。不过,以下情况除外:search仍可在 v1 注册表上执行这些操作。

在 HTTPS_PROXY 后台运行 Docker 守护进程

当在使用代理的局域网内运行时,代理的证书会替换 Docker Hub 的证书。这些证书必须添加到您的 Docker 主机的配置中:

为您的发行版安装ca-certificates软件包 向您的网络管理员索取代理的CA证书,并将其附加到/etc/pki/tls/certs/ca-bundle.crt 然后使用以下命令启动您的 Docker 守护程序:和是可选的——仅当您的代理设置为需要身份验证时才需要。 这仅会将代理和身份验证添加到 Docker 守护程序的请求中。要在构建镜像和运行容器时使用代理,请参阅配置 Docker 以使用代理服务器

默认ulimit设置

该标志可让您为所有容器设置默认选项。它采用与相同的选项。如果未设置这些默认值,则会从 Docker 守护程序继承设置。任何传递的选项都会覆盖守护程序默认值。

设置标志时请务必小心,因为Linux 的设计目的是为用户设置可用的最大进程数,而非容器。有关详细信息,请参阅参考文档。

访问授权

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

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

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

插件安装后,通过命令行或 Docker 引擎 API 发出的请求将由该插件允许或拒绝。如果您安装了多个插件,则必须按顺序让每个插件都允许该请求,才能使请求顺利完成。

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

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

Linux 内核用户命名空间支持通过为进程(进而为容器)提供一组独特的用户和组 ID 范围,使其超出宿主机系统所使用的传统用户和组范围,从而增强了安全性。其中一项最重要的安全改进是,默认情况下,以运行的容器进程用户期望在容器内拥有管理权限(尽管存在一定限制),但实际上映射到主机上的非特权用户。

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

配置主机网关IP

Docker 守护程序支持标志的特殊值,用于和命令。此值会解析为主机上的地址,以便容器能够连接到在主机上运行的服务。

默认情况下,host-gateway解析为默认网桥的 IPv4 地址,如果该网桥有 IPv6 地址,则解析为其 IPv6 地址。

您可以使用 dockerd 命令行界面的–host-gateway-ip标志,或守护进程配置文件中的host-gateway-ip键,将此配置为解析到不同的 IP。

<b要在命令行上同时提供 IPv4 和 IPv6 地址,请使用两个–host-gateway-ip选项。

要在守护进程配置文件中提供地址,请使用JSON 数组,如下所示。为与旧版守护进程兼容,也可将单个 IP 地址指定为选项中的 JSON 字符串。

 cat > /etc/docker/daemon.json
{ "host-gateway-ips": ["192.0.2.1", "2001:db8::1111"]}
 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.1): 56 data bytes
 docker run -it --add-host host.docker.internal:host-gateway \
  busybox ping -6 host.docker.internal
PING host.docker.internal (2001:db8::1111): 56 data bytes

配置CDI设备

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

CDI 目前仅支持 Linux 容器,自 Docker 引擎 28.3.0 起默认启用。

如果请求的设备规格在守护进程的文件系统中可用,Docker 守护进程支持使用 CDI 设备运行容器。

默认规范目录为:

/etc/cdi/用于静态CDI规范 /var/run/cdi用于生成的 CDI 规范 设置自定义位置 要为CDI规范设置自定义位置,请使用配置文件中的选项,或CLI的标志:

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

您可以使用docker info命令查看已配置的CDI规范目录。

禁用CDI设备 该功能默认启用。要禁用它,请使用cdi文件中的deamon.json选项:

"features": {
  "cdi": false
},

要检查 CDI 设备的状态,请运行docker info.

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

以下示例通过–log-format命令行选项配置守护进程,以使用json格式化日志;

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

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

{
  "log-format": "json"
}

其他选项

IP伪装使用地址转换,使没有公共IP的容器能够与互联网上的其他设备通信。这可能会干扰某些网络拓扑结构,可通过以下方式禁用–ip-masq=false.

Default cgroup parent 该–cgroup-parent选项可让您为容器设置默认 cgroup 父级。如果未设置此选项,则对于 cgroupfs 驱动程序,默认值为/docker,而对于 systemd cgroup 驱动程序,默认值为system.slice。

如果cgroup以正斜杠(/)开头,则该cgroup会在根cgroup下创建;否则,该cgroup会在守护进程cgroup下创建。

Assuming the daemon is running in cgroup daemoncgroup, –cgroup-parent=/foobar creates a cgroup in /sys/fs/cgroup/memory/foobar, whereas using –cgroup-parent=foobar creates the cgroup in /sys/fs/cgroup/memory/daemoncgroup/foobar

systemd cgroup 驱动程序对. systemd 采用分片来表示层次结构,分片的名称编码了其在树中的位置。因此,对于 systemd cgroup,应使用分片名称。一个名称可以由一系列用短划线分隔的名称组成,用于描述从根分片到该分片的路径。例如,表示容器的内存控制组是在中创建的。

此设置也可按容器进行设置,使用–cgroup-parent选项上的docker create和docker run,并优先于守护进程上的–cgroup-parent选项。

守护进程指标 该选项采用TCP地址来提供指标API。此功能仍处于实验阶段,因此,必须以实验模式运行守护进程,此功能才能生效。

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

If you are running a Prometheus server you can add this address to your scrape configs to have Prometheus collect metrics on Docker. For more information, see Collect Docker metrics with Prometheus.

Node generic resources 该选项接受键值对列表(),允许您在 Swarm 集群中推广用户定义的资源。

当前预期的用例是宣传NVIDIA GPU,以便请求服务NVIDIA-GPU=[0-16]能够部署到具备足够GPU以运行该任务的节点上。

使用示例:

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

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

该–feature选项可让您在守护进程中启用或禁用某个功能。此选项与daemon.json 配置文件中的“features”字段相对应。功能只能通过–feature命令行选项或配置文件中的“features”字段进行配置;同时使用命令行选项和配置文件中的“features”字段会导致错误。可以多次指定功能选项,以配置多个功能。该–feature选项接受一个名称和可选的布尔值。省略该值时,默认值为true.

以下示例使用了启用的和功能运行守护进程。选项附带一个值;

dockerd –feature cdi=true –feature containerd-snapshotter 以下示例是使用daemon.json配置文件的等效示例;

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

———

守护进程配置文件

该–config-file选项允许您以 JSON 格式为守护程序设置任何配置选项。此文件使用与标志名称相同的键名,但允许多个条目的标志除外,这些标志使用标志名称的复数形式,例如:labels对于label标志。

配置文件中设置的选项不得与通过标志设置的选项冲突。如果文件与标志之间存在重复的选项,无论其值如何,Docker 守护进程都将无法启动。这是有意为之,可避免在重新加载配置时悄然忽略所做的更改。例如,如果您在配置文件中设置守护进程标签,同时又通过–label标志设置守护进程标签,则守护进程将无法启动。在守护进程启动时,文件中不存在的选项会被忽略。

该选项允许在不启动 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-direct-routing”: false, “authorization-plugins”: [], “bip”: “”, “bip6”: “”, “bridge”: “”, “bridge-accept-fwmark”: “”, “builder”: { “gc”: { “enabled”: true, “defaultReservedSpace”: “10GB”, “policy”: [ { “maxUsedSpace”: “512MB”, “keepDuration”: “48h”, “filter”: [ “type=source.local” ] }, { “reservedSpace”: “10GB”, “maxUsedSpace”: “100GB”, “keepDuration”: “1440h” }, { “reservedSpace”: “50GB”, “minFreeSpace”: “20GB”, “maxUsedSpace”: “200GB”, “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 }, “firewall-backend”: “”, “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” ], “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中设置已在守护进程启动时作为标志设置的选项。在使用 systemd 启动 Docker 守护进程的系统上,-H已设置,因此您无法在hosts中使用daemon.json键来添加监听地址。请参阅自定义 Docker 守护进程选项有关如何使用 systemd 下拉文件配置守护进程的示例。

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

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

{ “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- 这是 Docker 自首次支持 Windows 以来一直使用的内置运行时,它使用 Windows 中的 v1 HCS API。

  • 这使用 containerd shim 来运行容器,并在 Windows 中使用 v2 HCS API。 功能选项 可选字段允许您启用或禁用特定守护进程功能。

{ “features”: { “some-feature”: true, “some-disabled-feature-enabled-by-default”: false } } The list of feature options include:

containerd-snapshotter: when set to true, the daemon uses containerd snapshotters instead of the classic storage drivers for storing image and container data. For more information, see containerd storage.

windows-dns-proxy:当设置为true时,守护进程的内部 DNS 解析器会将请求转发到外部服务器。如果没有此项设置,容器中运行的大多数应用程序仍可使用容器自身配置的备用 DNS 服务器,但nslookup将无法解析外部域名。当前默认值为false,将在未来版本中更改为true。此选项仅适用于 Windows。

警告 该功能标志将在未来版本中移除。

配置重新加载行为 某些选项可在守护进程运行时重新配置,无需重启该进程。守护进程在 Linux 中使用SIGHUP信号来重新加载,在 Windows 中则通过按键触发全局事件。Global\docker-daemon-config-$PID您可以修改配置文件中的选项,但守护进程仍会检查这些选项与指定的 CLI 标志是否存在冲突。如果存在冲突,守护进程将无法重新配置自身,但不会停止执行。

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

选项 描述 debug 切换守护进程的调试模式。 labels 用一组新标签替换守护进程标签。 live-restore 切换实时恢复. max-concurrent-downloads 配置每个拉取的最大并发下载数。 max-concurrent-uploads 配置每个推送的最大并发上传数。 max-download-attempts 配置每个拉取的最大下载尝试次数。 default-runtime 配置在容器创建时未指定运行时时所使用的运行时。 runtimes 配置可用于运行容器的可用OCI运行时列表。 authorization-plugin 指定要使用的授权插件。 insecure-registries 指定守护程序应视为不安全的注册表列表。 registry-mirrors 指定注册表镜像列表。 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 当您的守护进程为这些标志使用不同的值时,您可以在同一台主机上毫无问题地运行它们。务必理解这些选项的含义,并正确使用它们。

该标志设置为默认桥接网络。在安装 Docker 时会自动创建。如果您未使用默认值,则必须手动创建并配置桥接网络,或将其设置为“无”: –exec-root是存储容器状态的路径。默认值为/var/run/docker。请在此处指定您正在运行的守护程序的路径。 -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-masq。true如果没有 IP 地址伪装规则,Docker 容器在使用默认网桥以外的网络时,将无法连接到外部主机或互联网。 –config-file=/etc/docker/daemon.json是存储配置文件的路径。您可以使用它代替守护进程标志。为每个守护进程指定路径。 –tlsDocker 守护程序支持–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 默认网络选项 配置文件中的< b >密钥default-network-opts以及相应的daemon.jsonCLI 标志–default-network-opt可让您为新网络的驱动程序网络驱动程序选项指定默认值。

以下示例演示了如何使用文件为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”} <b请注意,更改此守护进程配置不会影响现有网络。

使用 CLI 标志对于测试和调试很有用,但您应优先使用文件进行持久守护进程配置。CLI 标志需要以下格式的值:,例如:

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


docker 启动参数

选项为[]时可多次指定。

Usage:	dockerd [OPTIONS]

A self-sufficient runtime for containers.

Options:
      --add-runtime runtime                   Register an additional OCI compatible runtime (default [])
      --allow-direct-routing                  Allow remote access to published ports on container IP addresses
      --authorization-plugin list             Authorization plugins to load
      --bip string                            IPv4 address for the default bridge
      --bip6 string                           IPv6 address for the default bridge
  -b, --bridge string                         Attach containers to a network bridge
      --bridge-accept-fwmark string           In bridge networks, accept packets with this firewall mark/mask
      --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                    Default gateway IPv4 address for the default bridge network
      --default-gateway-v6 ip                 Default gateway IPv6 address for the default bridge network
      --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
      --firewall-backend string               Firewall backend to use, iptables or nftables
      --fixed-cidr string                     IPv4 subnet for the default bridge network
      --fixed-cidr-v6 string                  IPv6 subnet for the default bridge network
  -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 list                  IP addresses that the special 'host-gateway' string in --add-host resolves to.
                                              Defaults to the IP addresses 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 for the default bridge network (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                                 Host IP for port publishing from the default bridge network (default 0.0.0.0)
      --ip-forward                            Enable IP forwarding in system configuration (default true)
      --ip-forward-no-drop                    Do not set the filter-FORWARD policy to DROP when enabling IP forwarding
      --ip-masq                               Enable IP masquerading for the default bridge network (default true)
      --ip6tables                             Enable addition of ip6tables rules (default true)
      --iptables                              Enable addition of iptables rules (default true)
      --ipv6                                  Enable IPv6 networking for the default bridge network
      --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 MTU for the default "bridge" network (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
  -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. Set to "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

文章摘要

本文聚焦于Docker启动参数的详细解析,旨在帮助用户深入理解Docker启动时的配置选项及其作用。

启动参数概述

Docker启动参数是指在启动Docker守护进程时,通过命令行或配置文件指定的参数。这些参数决定了Docker守护进程的初始化行为,包括存储路径、日志级别、网络配置等。正确配置启动参数可以显著提升Docker的性能和安全性。

启动参数的作用范围

启动参数主要影响Docker守护进程的初始化行为,包括但不限于:

  • 存储路径的配置
  • 日志级别的设置
  • 网络通信的配置
  • 安全相关的设置

常用启动参数详解

--config-file

作用:指定Docker守护进程的配置文件路径。

示例

dockerd --config-file /etc/docker/daemon.json

说明:通过--config-file参数,可以指定Docker守护进程的配置文件路径。配置文件通常包含Docker的全局配置选项,如存储驱动、日志级别等。

--log-level

作用:配置Docker日志的输出级别。

示例

dockerd --log-level debug

说明--log-level参数用于设置Docker日志的输出级别,可选值包括debuginfowarnerror等。通过调整日志级别,可以更详细地了解Docker的运行状态。

--host

作用:指定Docker守护进程监听的地址和端口。

示例

dockerd --host tcp://0.0.0.0:2375

说明--host参数用于指定Docker守护进程监听的地址和端口。默认情况下,Docker守护进程监听Unix套接字unix:///var/run/docker.sock。通过--host参数,可以配置Docker守护进程监听TCP端口,以便远程访问。

--tlsverify

作用:启用TLS加密通信,确保Docker客户端与守护进程之间的安全连接。

示例

dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem

说明--tlsverify参数用于启用TLS加密通信,确保Docker客户端与守护进程之间的安全连接。启用TLS后,客户端必须提供有效的证书才能与Docker守护进程通信。

--storage-driver

作用:指定Docker使用的存储驱动。

示例

dockerd --storage-driver overlay2

说明--storage-driver参数用于指定Docker使用的存储驱动。常见的存储驱动包括overlay2aufsbtrfs等。选择合适的存储驱动可以显著提升Docker的性能和稳定性。

--dns

作用:配置容器默认使用的DNS服务器。

示例

dockerd --dns 8.8.8.8 --dns 8.8.4.4

说明--dns参数用于配置容器默认使用的DNS服务器。通过指定多个DNS服务器,可以提高容器的网络解析能力。

--default-ulimit

作用:设置容器的默认资源限制。

示例

dockerd --default-ulimit nofile=1024:2048

说明--default-ulimit参数用于设置容器的默认资源限制,如文件描述符数量、CPU时间等。通过合理配置资源限制,可以防止容器占用过多系统资源。

--icc

作用:控制容器间的网络通信。

示例

dockerd --icc=false

说明--icc参数用于控制容器间的网络通信。默认情况下,Docker允许容器间自由通信。通过设置--icc=false,可以禁止容器间的网络通信,提高安全性。

启动参数的最佳实践

根据生产环境需求选择合适的启动参数组合

在生产环境中,应根据实际需求选择合适的启动参数组合。例如,对于高安全要求的场景,可以启用TLS加密通信;对于高性能要求的场景,可以选择合适的存储驱动。

避免过度配置,确保启动参数的可维护性和可读性

在配置启动参数时,应避免过度配置,确保启动参数的可维护性和可读性。过多的启动参数会增加配置的复杂性,降低系统的可维护性。

结合日志级别和监控工具,实时跟踪Docker守护进程的运行状态

通过合理配置日志级别,并结合监控工具,可以实时跟踪Docker守护进程的运行状态,及时发现和解决问题。

dockerd 启动参数配置

除了命令行参数外,还可以使用配置文件方式配置 dockerd 启动参数,具体参考 /etc/docker/deamon.json

docker 命令行参数可以配置到

  • /etc/system/systemd/dockerd.service
  • /etc/sysconfig/docker 中的 OPTON

Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的存放位置不一致

  • 在 ubuntu 中的位置是:/etc/default/docker
  • 在 centos6 中的位置是:/etc/sysconfig/docker
  • 在 centos7 中的位置是:/etc/docker/

OPTON 配置

启动参数 描述
–api-enable-cors=false 远程API调用
-b, –bridge="" 桥接一个系统上的网桥设备到 Docker 容器里,当使用 none 可以停用容器里的网络
–bip="" 使用 CIDR 地址来设定网络桥的 IP。此参数和 -b 不能一起使用。
-D, –debug=false 开启Debug模式。例如:docker -d -D
-d, –daemon=false 开启Daemon模式。
–dns=[] 设置容器使用DNS服务器。例如: docker -d –dns 8.8.8.8
-dns-search=[] 设置容器使用指定的DNS搜索域名。如: docker -d –dns-search example.com
–exec-driver=“native” 设置容器使用指定的运行时驱动。如:docker -d -e lxc
-G, –group=“docker” 在后台运行模式下,赋予指定的 Group 到相应的 unix socket 上。注意,当此参数 –group 赋予空字符串时,将去除组信息
-g, –graph="/var/lib/docker" 设置 Docker 运行时根目录
-H, –host=[] 设置后台模式下指定socket绑定,可以绑定一个或多个 tcp://host:port, unix:///path/to/socket, fd://* 或 fd://socketfd。如:$ docker -H tcp://0.0.0.0:2375 ps 或者$ export DOCKER_HOST=“tcp://0.0.0.0:2375”$ docker ps
-icc=true 设置启用内联容器的通信。
–ip=“0.0.0.0” 设置容器绑定 IP 时使用的默认 IP 地址
–ip-forward=true 设置启动容器的 net.ipv4.ip_forward
–iptables=true 设置启动Docker容器自定义的 iptable 规则
–mtu=0 设置容器网络的 MTU 值,如果没有这个参数,选用默认 route MTU,如果没有默认route,就设置成常量值 1500。
-p, –pidfile="/var/run/docker.pid" 设置后台进程PID文件路径。
-r, –restart=true 设置重启之前运行中的容器
-s, –storage-driver="" 设置容器运行时使用指定的存储驱动,如,指定使用devicemapper,可以这样:docker -d -s devicemapper
–selinux-enabled=false 设置启用 selinux 支持
–storage-opt=[] 设置存储驱动的参数

参考

https://docs.docker.com/engine/reference/commandline/dockerd/


title: dockerd 启动参数配置 weight: 440

除了命令行参数外,还可以使用配置文件方式配置 dockerd 启动参数,具体参考 /etc/docker/deamon.json

docker 命令行参数可以配置到

  • /etc/system/systemd/dockerd.service
  • /etc/sysconfig/docker 中的 OPTON

Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的存放位置不一致

  • 在 ubuntu 中的位置是:/etc/default/docker
  • 在 centos6 中的位置是:/etc/sysconfig/docker
  • 在 centos7 中的位置是:/etc/docker/

OPTON 配置

启动参数 描述
–api-enable-cors=false 远程API调用
-b, –bridge="" 桥接一个系统上的网桥设备到 Docker 容器里,当使用 none 可以停用容器里的网络
–bip="" 使用 CIDR 地址来设定网络桥的 IP。此参数和 -b 不能一起使用。
-D, –debug=false 开启Debug模式。例如:docker -d -D
-d, –daemon=false 开启Daemon模式。
–dns=[] 设置容器使用DNS服务器。例如: docker -d –dns 8.8.8.8
-dns-search=[] 设置容器使用指定的DNS搜索域名。如: docker -d –dns-search example.com
–exec-driver=“native” 设置容器使用指定的运行时驱动。如:docker -d -e lxc
-G, –group=“docker” 在后台运行模式下,赋予指定的 Group 到相应的 unix socket 上。注意,当此参数 –group 赋予空字符串时,将去除组信息
-g, –graph="/var/lib/docker" 设置 Docker 运行时根目录
-H, –host=[] 设置后台模式下指定socket绑定,可以绑定一个或多个 tcp://host:port, unix:///path/to/socket, fd://* 或 fd://socketfd。如:$ docker -H tcp://0.0.0.0:2375 ps 或者$ export DOCKER_HOST=“tcp://0.0.0.0:2375”$ docker ps
-icc=true 设置启用内联容器的通信。
–ip=“0.0.0.0” 设置容器绑定 IP 时使用的默认 IP 地址
–ip-forward=true 设置启动容器的 net.ipv4.ip_forward
–iptables=true 设置启动Docker容器自定义的 iptable 规则
–mtu=0 设置容器网络的 MTU 值,如果没有这个参数,选用默认 route MTU,如果没有默认route,就设置成常量值 1500。
-p, –pidfile="/var/run/docker.pid" 设置后台进程PID文件路径。
-r, –restart=true 设置重启之前运行中的容器
-s, –storage-driver="" 设置容器运行时使用指定的存储驱动,如,指定使用devicemapper,可以这样:docker -d -s devicemapper
–selinux-enabled=false 设置启用 selinux 支持
–storage-opt=[] 设置存储驱动的参数

daemon.json 配置

{
    "authorization-plugins": [],//访问授权插件
    "data-root": "",//docker数据持久化存储的根目录
    "dns": [],//DNS服务器
    "dns-opts": [],//DNS配置选项,如端口等
    "dns-search": [],//DNS搜索域名
    "exec-opts": [],//执行选项
    "exec-root": "",//执行状态的文件的根目录
    "experimental": false,//是否开启试验性特性
    "storage-driver": "",//存储驱动器
    "storage-opts": [],//存储选项
    "labels": [],//键值对式标记docker元数据
    "live-restore": true,//dockerd挂掉是否保活容器(避免了docker服务异常而造成容器退出)
    "log-driver": "",//容器日志的驱动器
    "log-opts": {},//容器日志的选项
    "mtu": 0,//设置容器网络MTU(最大传输单元)
    "pidfile": "",//daemon PID文件的位置
    "cluster-store": "",//集群存储系统的URL
    "cluster-store-opts": {},//配置集群存储
    "cluster-advertise": "",//对外的地址名称
    "max-concurrent-downloads": 3,//设置每个pull进程的最大并发
    "max-concurrent-uploads": 5,//设置每个push进程的最大并发
    "default-shm-size": "64M",//设置默认共享内存的大小
    "shutdown-timeout": 15,//设置关闭的超时时限(who?)
    "debug": true,//开启调试模式
    "hosts": [],//监听地址(?)
    "log-level": "",//日志级别
    "tls": true,//开启传输层安全协议TLS
    "tlsverify": true,//开启输层安全协议并验证远程地址
    "tlscacert": "",//CA签名文件路径
    "tlscert": "",//TLS证书文件路径
    "tlskey": "",//TLS密钥文件路径
    "swarm-default-advertise-addr": "",//swarm对外地址
    "api-cors-header": "",//设置CORS(跨域资源共享-Cross-origin resource sharing)头
    "selinux-enabled": false,//开启selinux(用户、进程、应用、文件的强制访问控制)
    "userns-remap": "",//给用户命名空间设置 用户/组
    "group": "",//docker所在组
    "cgroup-parent": "",//设置所有容器的cgroup的父类(?)
    "default-ulimits": {},//设置所有容器的ulimit
    "init": false,//容器执行初始化,来转发信号或控制(reap)进程
    "init-path": "/usr/libexec/docker-init",//docker-init文件的路径
    "ipv6": false,//开启IPV6网络
    "iptables": false,//开启防火墙规则
    "ip-forward": false,//开启net.ipv4.ip_forward
    "ip-masq": false,//开启ip掩蔽(IP封包通过路由器或防火墙时重写源IP地址或目的IP地址的技术)
    "userland-proxy": false,//用户空间代理
    "userland-proxy-path": "/usr/libexec/docker-proxy",//用户空间代理路径
    "ip": "0.0.0.0",//默认IP
    "bridge": "",//将容器依附(attach)到桥接网络上的桥标识
    "bip": "",//指定桥接ip
    "fixed-cidr": "",//(ipv4)子网划分,即限制ip地址分配范围,用以控制容器所属网段实现容器间(同一主机或不同主机间)的网络访问
    "fixed-cidr-v6": "",//(ipv6)子网划分
    "default-gateway": "",//默认网关
    "default-gateway-v6": "",//默认ipv6网关
    "icc": false,//容器间通信
    "raw-logs": false,//原始日志(无颜色、全时间戳)
    "allow-nondistributable-artifacts": [],//不对外分发的产品提交的registry仓库
    "registry-mirrors": [],//registry仓库镜像
    "seccomp-profile": "",//seccomp配置文件
    "insecure-registries": [],//非https的registry地址
    "no-new-privileges": false,//禁止新优先级(??)
    "default-runtime": "runc",//OCI联盟(The Open Container Initiative)默认运行时环境
    "oom-score-adjust": -500,//内存溢出被杀死的优先级(-1000~1000)
    "node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],//对外公布的资源节点
    "runtimes": {//运行时
        "cc-runtime": {
            "path": "/usr/bin/cc-runtime"
        },
        "custom": {
            "path": "/usr/local/bin/my-runc-replacement",
            "runtimeArgs": [
                "--debug"
            ]
        }
    }
}

参数解释

参考

https://docs.docker.com/engine/reference/commandline/dockerd/