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
--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")
-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 对守护进程和客户端使用不同的二进制文件。要运行您键入的守护程序dockerd
。
要使用调试输出运行守护程序,请使用dockerd --debug
或添加"debug": true
到
文件daemon.json
.
启用实验性功能
dockerd
通过从--experimental
标志开始或添加"experimental": true
到文件来启用实验性功能daemon.json
。
环境变量
守护程序支持以下环境变量列表dockerd
。其中一些环境变量受 Docker Daemon 和docker
CLI 的支持。请参阅
CLI 部分中的环境变量
,了解
docker
CLI 支持的环境变量。
多变的 | 描述 |
---|---|
DOCKER_CERT_PATH | 您的身份验证密钥的位置。docker CLI和守护程序都使用此变量
dockerd 。 |
DOCKER_DRIVER | 要使用的存储驱动程序。 |
DOCKER_RAMDISK | 如果设置此禁用pivot_root 。 |
DOCKER_TLS_VERIFY | 设置后,Docker 使用 TLS 并验证远程。docker CLI和守护程序都使用此变量
dockerd 。 |
DOCKER_TMPDIR | 守护程序创建的临时文件的位置。 |
HTTP_PROXY | HTTP 请求的代理 URL,除非被 NoProxy 覆盖。有关详细信息,请参阅 Go 规范。 |
HTTPS_PROXY | HTTPS 请求的代理 URL,除非被 NoProxy 覆盖。有关详细信息,请参阅 Go 规范。 |
MOBY_DISABLE_PIGZ | unpigz 即使已安装,在拉取映像时也禁用
并行解压缩层。 |
NO_PROXY | 逗号分隔值指定应从代理中排除的主机。有关详细信息,请参阅 Go 规范。 |
例子
代理配置
笔记
如果您正在运行 Docker Desktop ,请参阅 Docker Desktop 手册。
如果您位于 HTTP 代理服务器后面,例如在公司设置中,则可能需要配置 Docker 守护程序以使用代理服务器进行拉取和推送映像等操作。可以通过三种方式配置守护进程:
- 使用环境变量(
HTTP_PROXY
、HTTPS_PROXY
和NO_PROXY
)。 - 使用守护程序配置文件中的
http-proxy
、https-proxy
、 和字段(Docker 引擎版本 23.0 或更高版本)。no-proxy
- 使用
--http-proxy
、--https-proxy
和--no-proxy
命令行选项。 (Docker 引擎版本 23.0 或更高版本)。
命令行和配置文件选项优先于环境变量。请参阅
使用 systemd 控制和配置 Docker,
以使用systemd
.
守护进程套接字选项
Docker 守护进程可以通过三种不同类型的 Socket侦听
Docker Engine APIunix
请求: 、tcp
和fd
。
默认情况下,unix
域套接字(或 IPC 套接字)在 处创建
/var/run/docker.sock
,需要root
权限或docker
组成员身份。
如果需要远程访问Docker守护进程,则需要启用tcp Socket。使用 TCP 套接字时,Docker 守护进程默认提供对 Docker 守护进程的未加密和未验证的直接访问。您应该使用内置的 HTTPS 加密套接字或在其前面放置一个安全的 Web 代理来保护守护程序
。您可以使用 侦听2375
所有网络接口上的端口-H tcp://0.0.0.0:2375
,或使用其 IP 地址侦听特定网络接口上的端口-H tcp://192.168.59.103:2375
。通常使用端口2375
进行未加密的通信,并使用端口2376
进行与守护程序的加密通信。
笔记
如果您使用 HTTPS 加密套接字,请记住仅支持 TLS 版本 1.0 及更高版本。出于安全原因,不支持 SSLv3 及以下协议。
在基于 systemd 的系统上,您可以通过systemd 套接字激活与守护进程通信
dockerd -H fd://
。使用fd://
适用于大多数设置,但您也可以指定单独的套接字:dockerd -H fd://3
。如果未找到指定的套接字激活文件,守护进程将退出。您可以在Docker 源代码树中找到通过 Docker 和 systemd 使用 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_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 套接字
警告
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 客户端默认连接到unix:///var/run/docker.sock
Linux 和tcp://127.0.0.1:2376
Windows。
-H
接受以下格式的主机和端口分配:
tcp://[host]:[port][path] or unix://path
例如:
tcp://
->当启用 TLS 加密时, TCP 连接127.0.0.1
到任一端口;当通信采用纯文本时,TCP 连接到任一端口。2376
2375
tcp://host:2375
-> 主机上的 TCP 连接:2375tcp://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
守护进程存储驱动程序
在 Linux 上,Docker 守护程序支持多种不同的映像层存储驱动程序:overlay2
、fuse-overlayfs
、btrfs
和zfs
。
overlay2
是当前所有支持的 Linux 发行版的首选存储驱动程序,并且默认处于选中状态。除非用户有充分的理由更喜欢其他存储驱动程序,否则
overlay2
应使用。
您可以在选择存储驱动程序中找到有关存储驱动程序以及如何选择 存储驱动程序的更多信息。
在 Windows 上,Docker 守护程序仅支持windowsfilter
存储驱动程序。
每个存储驱动程序的选项
特定的存储驱动程序可以使用
--storage-opt
标志指定的选项进行配置。zfs
开始于 的选项zfs
和
btrfs
开始于 的选项btrfs
。
ZFS 选项
zfs.fsname
指定守护进程用来创建其数据集的 ZFS 文件系统。默认情况下,/var/lib/docker
使用ZFS 文件系统。
例子
$ sudo dockerd -s zfs --storage-opt zfs.fsname=zroot/docker
Btrfs 选项
btrfs.min_space
指定创建用于容器的子卷时要使用的最小大小。如果用户在使用--storage-opt size选项创建或运行容器时使用 btrfs 的磁盘配额,Docker 应确保 大小不能小于btrfs.min_space。
例子
$ sudo dockerd -s btrfs --storage-opt btrfs.min_space=10G
覆盖2选项
覆盖2.尺寸
设置容器的默认最大大小。仅当支持文件系统xfs
已使用 mount 选项挂载时才受支持pquota
。在这些条件下,用户可以传递小于支持文件系统大小的任何大小。
例子
$ sudo dockerd -s overlay2 --storage-opt overlay2.size=1G
Windows过滤器选项
尺寸
指定创建用于容器的沙箱时要使用的大小。默认为 20G。
例子
C:\> dockerd --storage-opt size=40G
运行时选项
Docker 守护进程依赖于
OCI兼容的运行时(通过守护进程调用)作为其与containerd
Linux 内核的接口namespaces
。cgroups
SELinux
配置容器运行时
默认情况下,Docker 守护进程使用 runc 作为容器运行时。您可以配置守护程序以添加其他运行时。
安装后的containerd shimsPATH
可以直接使用,无需编辑守护进程的配置。例如,如果您containerd-shim-kata-v2
在 上安装 Kata Containers shim ( ) PATH
,则可以选择该运行时,而docker run
无需编辑守护程序的配置:
$ docker run --runtime io.containerd.kata.v2
不实现containerd shims 的容器运行时或在外部安装的containerd shimsPATH
必须通过配置文件或使用命令行标志向守护进程注册--add-runtime
。
有关如何使用其他容器运行时的示例,请参阅 替代容器运行时
使用 daemon.json 配置运行时
要使用守护程序的配置文件注册和配置容器运行时,请将运行时添加为以下条目runtimes
:
{
"runtimes": {
"<runtime>": {}
}
}
条目的键(<runtime>
在前面的示例中)表示运行时的名称。这是您在运行容器时引用的名称,使用docker run --runtime <runtime>
.
运行时条目包含一个指定运行时配置的对象。对象的属性取决于您要注册的运行时类型:
如果运行时实现自己的containerd shim,则该对象应包含一个
runtimeType
字段和一个可选options
字段。{ "runtimes": { "<runtime>": { "runtimeType": "<name-or-path>", "options": {} } } }
请参阅 配置垫片。
如果运行时被设计为 runc 的直接替代品,则该对象包含一个
path
字段和一个可选runtimeArgs
字段。{ "runtimes": { "<runtime>": { "path": "/path/to/bin", "runtimeArgs": ["...args"] } } }
请参阅 配置 runc 直接替换。
更改配置文件中的运行时配置后,必须重新加载或重新启动守护程序才能使更改生效:
$ sudo systemctl reload dockerd
配置容器垫片
如果您要注册的运行时实现了 containerd shim,或者如果您要注册使用 runc shim 的运行时,请对运行时条目使用以下格式:
{
"runtimes": {
"<runtime>": {
"runtimeType": "<name-or-path>",
"options": {}
}
}
}
runtimeType
指:
容器填充程序的完全限定名称。
runtime_type
shim 的完全限定名称与用于在 containerd 的 CRI 配置中注册运行时的名称相同。例如,io.containerd.runsc.v1
。containerd shim 二进制文件的路径。
如果您在
PATH
.
options
是可选的。它允许您指定要用于填充程序的运行时配置。您可以指定的配置参数
options
取决于您正在注册的运行时。对于大多数垫片,支持的配置选项是TypeUrl
和ConfigPath
。例如:
{
"runtimes": {
"gvisor": {
"runtimeType": "io.containerd.runsc.v1",
"options": {
"TypeUrl": "io.containerd.runsc.v1.options",
"ConfigPath": "/etc/containerd/runsc.toml",
}
}
}
}
您可以使用相同的运行时类型配置多个运行时。例如:
{
"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 直接替换
如果您要注册的运行时可以充当 runc 的直接替代品,则可以使用守护程序配置文件或使用cli--add-runtime
的标志来注册运行时dockerd
。
当您使用配置文件时,该条目使用以下格式:
{
"runtimes": {
"<runtime>": {
"path": "/path/to/binary",
"runtimeArgs": ["...args"]
}
}
}
其中path
是运行时可执行文件的绝对路径,或者是安装在 上的可执行文件的名称PATH
:
{
"runtimes": {
"runc": {
"path": "runc"
}
}
}
并runtimeArgs
允许您选择将其他参数传递给运行时。具有此格式的条目使用 containerd runc shim 来调用自定义运行时二进制文件。
使用--add-runtime
CLI 标志时,请使用以下格式:
$ sudo dockerd --add-runtime <runtime>=<path>
不支持通过命令行定义运行时参数。
有关 runc 直接替换的示例配置,请参阅 替代容器运行时 > youki
配置默认容器运行时
您可以指定完全限定的containerd运行时填充程序的名称,或已注册的运行时的名称。您可以使用守护程序配置文件或使用cli--default-runtime
的标志来指定默认运行时dockerd
。
当您使用配置文件时,该条目使用以下格式:
{
"default-runtime": "io.containerd.runsc.v1"
}
使用--default-runtime
CLI 标志时,请使用以下格式:
$ dockerd --default-runtime io.containerd.runsc.v1
独立运行containerd
默认情况下,Docker 守护进程会自动启动containerd
。如果要控制containerd
启动,请手动启动并使用标志containerd
将路径传递给套接字。例如:containerd
--containerd
$ sudo dockerd --containerd /run/containerd/containerd.sock
配置cgroup驱动程序
您可以使用 CLI 标志配置运行时应如何管理容器 cgroup
--exec-opt native.cgroupdriver
。
您只能指定cgroupfs
或systemd
。如果您指定
systemd
但它不可用,系统会出错。如果省略该
native.cgroupdriver
选项, cgroupfs
则用于 cgroup v1 主机,systemd
则用于具有可用 systemd 的 cgroup v2 主机。
此示例将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
允许推送不可分发的工件
某些映像(例如,Windows 基础映像)包含其分发受许可证限制的工件。当这些映像被推送到注册表时,不包括受限制的工件。
要覆盖特定注册表的此行为,请使用
--allow-nondistributable-artifacts
以下形式之一的选项:
--allow-nondistributable-artifacts myregistry:5000
告诉 Docker 守护进程将不可分发的工件推送到 myregistry:5000。--allow-nondistributable-artifacts 10.1.0.0/16
告诉 Docker 守护进程将不可分发的工件推送到解析的 IP 地址位于 CIDR 语法描述的子网内的所有注册表。
该选项可以多次使用。
当将包含不可分发工件的映像推送到气隙网络上的注册表时,此选项非常有用,以便该网络上的主机可以提取映像而无需连接到其他服务器。
警告
不可分发的工件通常对其分发和共享的方式和地点有限制。仅使用此功能将工件推送到私有注册表,并确保您遵守涵盖重新分发不可分发工件的任何条款。
不安全的注册表
在本节中,“注册表”指的是私有注册表,并且myregistry:5000
是私有注册表的占位符示例。
Docker 认为私有注册表要么是安全的,要么是不安全的。安全注册表使用 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 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 守护进程
当在使用代理的 LAN 内运行时HTTPS
,代理的证书会替换 Docker Hub 的证书。必须将这些证书添加到 Docker 主机的配置中:
- 安装
ca-certificates
适合您的发行版的软件包 - 向您的网络管理员询问代理的 CA 证书并将其附加到
/etc/pki/tls/certs/ca-bundle.crt
- 然后使用 启动您的 Docker 守护进程
HTTPS_PROXY=http://username:password@proxy:port/ dockerd
。和username:
是password@
可选的 - 仅当您的代理设置为需要身份验证时才需要。
这只会将代理和身份验证添加到 Docker 守护程序的请求中。要在构建映像和运行容器时使用代理,请参阅 配置 Docker 以使用代理服务器
默认 ulimit 设置
该--default-ulimit
标志允许您设置ulimit
用于所有容器的默认选项。它采用--ulimit
与相同的选项docker run
。如果未设置这些默认值,ulimit
则设置将从 Docker 守护程序继承。--ulimit
传递用于docker run
覆盖守护程序默认值的任何选项。
请小心设置nproc
该ulimit
标志,因为nproc
Linux 设计的目的是设置用户可用的最大进程数,而不是容器的最大可用进程数。详细信息请参见
docker run
参考资料。
访问授权
Docker 的访问授权可以通过您的组织可以购买或自行构建的授权插件来扩展。您可以daemon
使用该
选项在启动 Docker 时安装一个或多个授权插件--authorization-plugin=PLUGIN_ID
。
$ sudo dockerd --authorization-plugin=plugin1 --authorization-plugin=plugin2,...
该PLUGIN_ID
值是插件的名称或其规范文件的路径。插件的实现决定您是否可以指定名称或路径。请咨询您的 Docker 管理员以获取有关您可用的插件的信息。
安装插件后,daemon
插件将允许或拒绝通过命令行或 Docker 引擎 API 发出的请求。如果您安装了多个插件,则每个插件必须按顺序允许其完成请求。
有关如何创建授权插件的信息,请参阅 授权插件部分。
守护进程用户命名空间选项
Linux 内核
用户命名空间支持
通过使进程(即容器)拥有独特的用户和组 ID 范围(超出主机系统使用的传统用户和组范围)来提供额外的安全性。最重要的安全改进之一是,默认情况下,以用户身份运行的容器进程
root
在容器内拥有其期望的管理权限(有一些限制),但会有效地映射到uid
主机上的非特权权限。
有关如何使用此功能以及限制的详细信息,请参阅 使用用户命名空间隔离容器。
配置主机网关IP
Docker 守护进程支持和命令
的标志host-gateway
的特殊值。该值解析为主机的网关 IP,并允许容器连接到主机上运行的服务。--add-host
docker run
docker build
默认情况下,host-gateway
解析为默认网桥的 IP 地址。您可以使用--host-gateway-ip
dockerd 命令行界面的标志或host-gateway-ip
守护程序配置文件中的键将其配置为解析为不同的 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.cdi
为 。true
daemon.json
容器设备接口 (CDI) 是 容器运行时的标准化 机制,用于创建能够与第三方设备交互的容器。
如果守护程序的文件系统上提供了请求的设备规范,则 Docker 守护程序支持使用 CDI 设备运行容器。
默认规范控制器为:
/etc/cdi/
对于静态 CDI 规格/var/run/cdi
对于生成的 CDI 规范
cdi-spec-dirs
或者,您可以使用配置文件中的选项daemon.json
或
CLI--cdi-spec-dir
的标志来设置 CDI 规范的自定义位置
dockerd
。
{
"features": {
"cdi": true
},
"cdi-spec-dirs": ["/etc/cdi/", "/var/run/cdi"]
}
当守护进程启用CDI后,您可以使用该docker info
命令查看配置的CDI规范目录。
其他选项
IP 伪装使用地址转换来允许没有公共 IP 的容器与互联网上的其他机器进行通信。这可能会干扰某些网络拓扑,可以使用 禁用--ip-masq=false
。
Docker 支持 Docker 数据目录 ( /var/lib/docker
) 和/var/lib/docker/tmp
.和DOCKER_TMPDIR
数据目录可以这样设置:
$ export DOCKER_TMPDIR=/mnt/disk2/tmp
$ sudo -E dockerd --data-root /var/lib/docker -H unix://
默认 cgroup 父级
该--cgroup-parent
选项允许您设置容器的默认 cgroup 父级。如果未设置此选项,则默认用于/docker
cgroupfs 驱动程序和system.slice
systemd cgroup 驱动程序。
如果 cgroup 有一个前导斜杠 ( /
),则该 cgroup 将在根 cgroup 下创建,否则该 cgroup 将在守护程序 cgroup 下创建。
假设守护进程在 cgroup 中运行daemoncgroup
,
--cgroup-parent=/foobar
则在中创建一个 cgroup
/sys/fs/cgroup/memory/foobar
,而 using--cgroup-parent=foobar
在中创建一个 cgroup/sys/fs/cgroup/memory/daemoncgroup/foobar
systemd cgroup 驱动程序对--cgroup-parent
. systemd 按切片表示层次结构,切片的名称编码树中的位置。因此--cgroup-parent
对于 systemd cgroups 应该是一个切片名称。名称可以由一系列以破折号分隔的名称组成,这些名称描述了从根切片到切片的路径。例如,--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 create
docker run
--cgroup-parent
守护进程指标
该--metrics-addr
选项采用 TCP 地址来为指标 API 提供服务。此功能仍处于实验阶段,因此守护程序必须在实验模式下运行才能使此功能发挥作用。
要在您上提供指标 API,localhost: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-generic-resources
选项采用键值对 ( key=value
) 列表,允许您在 Swarm 集群中通告用户定义的资源。
当前预期的用例是宣传 NVIDIA GPU,以便请求的服务NVIDIA-GPU=[0-16]
可以降落在具有足够 GPU 来运行任务的节点上。
使用示例:
{
"node-generic-resources": [
"NVIDIA-GPU=UUID1",
"NVIDIA-GPU=UUID2"
]
}
守护进程配置文件
该--config-file
选项允许您以 JSON 格式为守护程序设置任何配置选项。该文件使用与键相同的标志名称,但允许多个条目的标志除外,其中它使用标志名称的复数形式,例如,labels
用于label
标志。
配置文件中设置的选项不得与使用标志设置的选项冲突。如果文件和标志之间的选项重复,则无论其值如何,Docker 守护进程都将无法启动。这是有意为之的,可以避免默默地忽略配置重新加载中引入的更改。例如,如果您在配置文件中设置守护进程标签并通过标志设置守护进程标签,守护进程将无法启动--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": {},
"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-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
已在守护进程启动时设置为标志的选项。在使用 systemd 启动 Docker 守护进程的系统上,-H
已设置,因此您无法使用hosts
key indaemon.json
添加监听地址。 有关如何使用 systemd 插入文件配置守护程序的示例,请参阅 自定义 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-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
- 这是使用containerdrunhcs
shim来运行容器并在Windows中使用v2 HCS API。
功能选项
features
中的可选字段daemon.json
允许您启用或禁用特定的守护程序功能。
{
"features": {
"some-feature": true,
"some-disabled-feature-enabled-by-default": false
}
}
功能选项列表包括:
containerd-snapshotter
:当设置为 时true
,守护进程使用 containerd snapshotters 而不是传统的存储驱动程序来存储映像和容器数据。有关更多信息,请参阅 容器存储。
配置重新加载行为
某些选项可以在守护程序运行时重新配置,而无需重新启动进程。守护进程SIGHUP
在 Linux 中使用信号来重新加载,在 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 | 指定要使用的授权插件。 |
allow-nondistributable-artifacts | 指定守护程序将向其推送不可分发工件的注册表列表。 |
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
当您的守护进程对这些标志使用不同的值时,您可以在同一主机上运行它们而不会出现任何问题。了解这些选项的含义并正确使用它们非常重要。
- 该
-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 规则,Docker 也不会添加 IP 伪装规则,即使您设置--ip-masq
为true
.如果没有 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
默认网络选项
default-network-opts
配置文件中的键和daemon.json
等效的--default-network-opt
CLI 标志可让您为新网络的驱动程序网络驱动程序选项指定默认值。
以下示例显示如何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-opt
CLI 标志对于测试和调试目的很有用,但您应该更喜欢使用该daemon.json
文件进行持久守护程序配置。 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