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
对守护程序和客户端使用不同的二进制文件。要运行守护进程,您需要
类型。dockerd
要使用 debug 输出运行守护程序,请使用 或 add 到 daemon.json
文件。dockerd --debug
"debug": true
注意
启用实验性功能
通过以标志开头或添加到文件来启用实验性功能。
dockerd
--experimental
"experimental": true
daemon.json
环境变量
守护程序支持以下环境变量列表。
其中一些环境变量由 Docker Daemon 和
CLI 的 CLI 中。请参阅 环境变量 以了解 CLI 支持的环境变量。dockerd
docker
docker
变量 | 描述 |
---|---|
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 守护程序以使用 proxy server for 拉取和推送镜像等操作。守护进程可以配置 以三种方式:
- 使用环境变量 (、 和 )。
HTTP_PROXY
HTTPS_PROXY
NO_PROXY
- 使用守护程序配置文件中的 、 和 字段(Docker Engine 版本 23.0 或更高版本)。
http-proxy
https-proxy
no-proxy
- 使用 、 和 命令行
选项。(Docker Engine 版本 23.0 或更高版本)。
--http-proxy
--https-proxy
--no-proxy
命令行和配置文件选项优先于环境
变量。请参阅使用 systemd 控制和配置 Docker,以在主机上使用 设置这些环境变量。systemd
守护程序套接字选项
Docker 守护程序可以通过三种不同类型的 Socket 侦听 Docker Engine API 请求:、 和 。unix
tcp
fd
默认情况下,域套接字(或 IPC 套接字)是在 处创建的,需要权限或组
会员。unix
/var/run/docker.sock
root
docker
如果需要远程访问 Docker 守护进程,则需要启用 tcp
插座。使用 TCP 套接字时,Docker 守护程序会提供未加密的
un-authenticated 直接访问 Docker 守护进程。您应该确保
守护进程使用内置的 HTTPS 加密套接字,
或者通过在它前面放置一个安全的 Web 代理。您可以在所有
网络接口 或 特定网络
使用其 IP 地址的接口: 。是的
常规使用 Port 表示未加密,使用 Port 表示加密
与守护程序的通信。2375
-H tcp://0.0.0.0:2375
-H tcp://192.168.59.103:2375
2375
2376
注意
如果您使用的是 HTTPS 加密套接字,请记住,只有 支持 TLS 版本 1.0 及更高版本。SSLv3 及更低版本的协议不是 出于安全原因支持。
在基于 systemd 的系统上,您可以通过 systemd 套接字激活与守护进程通信。
跟。使用 适用于大多数设置,但
您还可以指定单个套接字: 。如果
未找到指定的套接字激活文件,守护程序将退出。您可以
在 Docker 源代码树中查找将 systemd 套接字激活与 Docker 和 systemd 结合使用的示例。dockerd -H fd://
fd://
dockerd -H fd://3
你可以将 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
将环境变量设置为
空字符串等效于设置 Flag。以下内容
是等效的: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 套接字
警告
将默认守护程序绑定更改为 TCP 端口或 Unix 用户组会带来安全风险,因为它可能允许非 root 用户获得 主机上的 root 访问权限。确保控制对 的访问。如果你是 绑定到 TCP 端口,则有权访问该端口的任何人都拥有完整的 Docker 访问;因此,不建议在开放网络上使用。
docker
docker
docker
这样就可以让 Docker 守护进程监听特定的 IP
和端口。默认情况下,它监听 allow
仅根用户的本地连接。您可以将其设置为 或
一个特定的主机 IP 来向所有人授予访问权限,但不建议这样做
因为有人可以获得对运行守护程序的主机的 root 访问权限。-H
unix:///var/run/docker.sock
0.0.0.0:2375
同样,Docker 客户端可用于连接到自定义端口。
Docker 客户端默认在 Linux 和 Windows 上连接到 。-H
unix:///var/run/docker.sock
tcp://127.0.0.1:2376
-H
接受以下格式的主机和端口分配:
tcp://[host]:[port][path] or unix://path
例如:
tcp://
- > TLS 加密时任一端口的 TCP 连接 是 on,或者是 port(当通信以纯文本形式进行时)。127.0.0.1
2376
2375
tcp://host:2375
-> TCP 连接开启 主机:2375tcp://host:2375/path
-> TCP 连接开启 host:2375 并在所有请求之前添加路径unix://path/to/socket
-> Unix 插槽 在path/to/socket
-H
,如果为空,则默认为 10 00 元
当没有被传递时。-H
-H
也接受 TCP 绑定的缩写形式:or 或host:
host:port
:port
以守护进程模式运行 Docker:
$ sudo <path to>/dockerd -H 0.0.0.0:5555 &
下载图片:ubuntu
$ docker -H :5555 pull ubuntu
您可以使用 multiple ,例如,如果您想同时侦听
TCP 和 Unix 套接字-H
$ 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-driver。start with 的选项和 start with 的选项。--storage-opt
zfs
zfs
btrfs
btrfs
ZFS 选项
zfs.fsname
指定守护进程创建其数据集时应使用的 ZFS 文件系统。
默认情况下,使用 ZFS 文件系统 in。/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
设置容器的默认最大大小。仅当
后备文件系统使用 mount 选项进行挂载。在这些
条件,用户可以传递小于后备文件系统大小的任何大小。xfs
pquota
例
$ sudo dockerd -s overlay2 --storage-opt overlay2.size=1G
Windowsfilter 选项
size
指定在创建用于容器的沙箱时要使用的大小。 默认为 20G。
例
C:\> dockerd --storage-opt size=40G
运行时选项
Docker 守护程序依赖于符合 OCI 标准的运行时
(通过守护进程调用)作为其到 Linux 的接口
内核 、 和 。containerd
namespaces
cgroups
SELinux
配置容器运行时
默认情况下,Docker 守护程序使用 runc 作为容器运行时。 您可以配置守护程序以添加其他运行时。
安装的 containerd shim 可以直接使用,无需
以编辑守护程序的配置。例如,如果您安装 Kata
容器 shim () 上,则可以选择该
runtime 的 Runtime 中,而无需编辑守护进程的配置:PATH
containerd-shim-kata-v2
PATH
docker run
$ docker run --runtime io.containerd.kata.v2
未实现 containerd 填充程序或 containerd 填充程序的容器运行时
安装在 外部,必须通过
配置文件或使用命令行标志。PATH
--add-runtime
有关如何使用其他容器运行时的示例,请参阅替代容器运行时
使用 daemon.json
配置运行时
使用守护程序的配置注册和配置容器运行时
文件中,将运行时添加为 :runtimes
{
"runtimes": {
"<runtime>": {}
}
}
条目的键(在前面的示例中为 )表示名称
的运行时。这是您在运行容器时引用的名称
用。<runtime>
docker run --runtime <runtime>
运行时条目包含一个对象,用于指定 运行。对象的属性取决于您的运行时类型 想要注册:
如果运行时实现自己的 containerd 填充码,则该对象应包含 一个字段和一个可选字段。
runtimeType
options
{ "runtimes": { "<runtime>": { "runtimeType": "<name-or-path>", "options": {} } } }
请参阅配置填充程序。
如果运行时设计为 runc 的直接替代品, 该对象包含一个 field 和一个 optional field。
path
runtimeArgs
{ "runtimes": { "<runtime>": { "path": "/path/to/bin", "runtimeArgs": ["...args"] } } }
在配置文件中更改 runtimes 配置后, 您必须重新加载或重新启动守护进程才能使更改生效:
$ sudo systemctl reload dockerd
配置 containerd 填充程序
如果要注册的运行时实现了 containerd shim, 或者,如果要注册使用 runc shim 的运行时, 对运行时条目使用以下格式:
{
"runtimes": {
"<runtime>": {
"runtimeType": "<name-or-path>",
"options": {}
}
}
}
runtimeType
指:
containerd shim 的完全限定名称。
填充码的完全限定名称与用于 在 containerd 的 CRI 配置中注册运行时。 例如。
runtime_type
io.containerd.runsc.v1
containerd shim 二进制文件的路径。
如果您在 之外安装了 containerd shim 二进制文件,则此选项非常有用。
PATH
options
是可选的。它允许您指定运行时配置,以便
想要用于填充码。您可以在 In 中指定的配置参数取决于您注册的运行时。对于大多数垫片,
支持的配置选项包括 和 。
例如:options
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"
}
}
}
}
该字段在使用时采用一组特殊的配置参数
跟。有关 runc 的更多信息
参数,请参阅 CRI 插件配置指南 中的 runc 配置部分。options
"runtimeType": "io.containerd.runc.v2"
配置 runc 直接替换
如果要注册的运行时可以用作
runc 中,你可以使用 daemon 配置文件注册运行时。
或使用 CLI 的标志。--add-runtime
dockerd
使用配置文件时,该条目使用以下格式:
{
"runtimes": {
"<runtime>": {
"path": "/path/to/binary",
"runtimeArgs": ["...args"]
}
}
}
其中 是运行时可执行文件的绝对路径,或者是名称
安装在 上的 可执行文件path
PATH
{
"runtimes": {
"runc": {
"path": "runc"
}
}
}
并且允许您选择将其他参数传递给运行时。
具有此格式的条目使用 containerd runc shim 调用自定义
runtime 二进制文件。runtimeArgs
使用 CLI 标志时,请使用以下格式:--add-runtime
$ sudo dockerd --add-runtime <runtime>=<path>
不支持通过命令行定义运行时参数。
有关 runc 直接替换的示例配置,请参阅 youki >替代容器运行时
配置默认容器运行时
您可以指定完全限定的 containerd 运行时 shim 的名称,
或已注册运行时的名称。您可以指定默认运行时
使用 daemon 配置文件,或使用
CLI 的--default-runtime
dockerd
使用配置文件时,该条目使用以下格式:
{
"default-runtime": "io.containerd.runsc.v1"
}
使用 CLI 标志时,请使用以下格式:--default-runtime
$ dockerd --default-runtime io.containerd.runsc.v1
运行 containerd standalone
默认情况下,Docker 守护程序会自动启动 。如果您想
控制启动,手动启动并将路径传递给
使用 flag.例如:containerd
containerd
containerd
containerd
--containerd
$ sudo dockerd --containerd /run/containerd/containerd.sock
配置 cgroup 驱动程序
您可以使用 CLI 标志配置运行时应如何管理容器 cgroup。--exec-opt native.cgroupdriver
您只能指定 或 。如果指定但该选项不可用,则系统出错。如果省略选项 is used on cgroup v1 hosts, is used on cgroup v2 hosts with systemd available。cgroupfs
systemd
systemd
native.cgroupdriver
cgroupfs
systemd
此示例将 设置为 :cgroupdriver
systemd
$ sudo dockerd --exec-opt native.cgroupdriver=systemd
设置此选项适用于守护程序启动的所有容器。
配置容器隔离技术 (Windows)
对于 Windows 容器,您可以指定默认容器隔离
技术使用,使用标志。--exec-opt isolation
以下示例使用默认隔离技术:hyperv
> dockerd --exec-opt isolation=hyperv
如果在守护程序启动时未指定隔离值,则在 Windows 客户端上,
默认值为 ,在 Windows 服务器上,默认值为 。hyperv
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 中,以便该网络上的主机可以提取 镜像,而无需连接到其他服务器。
警告
不可分发的工件通常对 以及它们可以分发和共享的位置。只使用此功能推送 工件复制到私有注册表中,并确保您遵守 涵盖重新分发不可分发构件的任何术语。
不安全的注册表
在本节中,“registry” 是指私有注册表,是私有注册表的占位符示例。myregistry:5000
Docker 认为私有注册表要么安全,要么不安全。
安全注册表使用 TLS,其 CA 证书的副本放置在
Docker 主机 。一个不安全
registry 未使用 TLS(即侦听纯文本 HTTP),或者
将 TLS 与 Docker 守护程序未知的 CA 证书一起使用。后者可以
如果在 下找不到证书,或者如果证书验证
失败(即错误的 CA)。/etc/docker/certs.d/myregistry:5000/ca.crt
/etc/docker/certs.d/myregistry:5000/
默认情况下,Docker 假定所有注册表都是安全的,但本地注册表除外。
无法与不安全的注册表通信
如果 Docker 假定注册表是安全的。为了与
insecure 注册表中,Docker 守护程序需要
以下两种形式:--insecure-registry
--insecure-registry myregistry:5000
告诉 Docker 守护程序 myregistry:5000 应被视为不安全。--insecure-registry 10.1.0.0/16
告诉 Docker 守护程序所有注册表 其域解析为 IP 地址是 CIDR 语法,应被视为不安全。
该标志可以多次使用,以允许标记多个注册中心 作为不安全。
如果不安全的注册表未标记为不安全,则 、 ,并导致错误消息,提示
用户保护标志或将标志传递给 Docker
daemon 中。docker pull
docker push
docker search
--insecure-registry
IP 地址在 127.0.0.0/8 范围内的本地注册表为 从 Docker 1.3.2 开始自动标记为不安全。不建议 依赖这一点,因为它将来可能会发生变化。
启用 ,即允许未加密和/或不受信任的
通信,在运行本地注册表时非常有用。然而
因为它的使用会产生安全漏洞,所以它只应针对
测试目的。为了提高安全性,用户应将其 CA 添加到其
系统的受信任 CA 列表,而不是启用 .--insecure-registry
--insecure-registry
旧版注册表
不再对仅支持旧版 v1 协议的注册管理机构执行操作
支持。具体来说,守护程序不会尝试推送、拉取或登录
添加到 v1 注册表。例外情况是仍然可以执行
在 v1 注册表上。search
在 HTTPS_PROXY 后面运行 Docker 守护程序
当在使用代理的 LAN 中运行时,代理的证书
替换 Docker Hub 的证书。这些证书必须添加到您的
Docker 主机的配置:HTTPS
- 安装发行版的软件包
ca-certificates
- 向您的网络管理员索取代理的 CA 证书,并将其附加到
/etc/pki/tls/certs/ca-bundle.crt
- 然后使用 启动 Docker 守护程序。
和 是可选的 - 仅当您的
代理设置为需要身份验证。
HTTPS_PROXY=http://username:password@proxy:port/ dockerd
username:
password@
这只会将代理和身份验证添加到 Docker 守护程序的请求中。 要在构建镜像和运行容器时使用代理,请参阅配置 Docker 以使用代理服务器
默认 ulimit
设置
该标志允许您设置要用于
所有容器。它采用与 相同的选项。如果
这些默认值未设置,设置是从 Docker 守护程序继承的。
传递以覆盖守护程序默认值的任何选项。--default-ulimit
ulimit
--ulimit
docker run
ulimit
--ulimit
docker run
请小心设置该标志,因为 Linux 设计用于
设置用户(而不是容器)可用的最大进程数。
有关详细信息,请参阅 docker run
参考。nproc
ulimit
nproc
访问授权
Docker 的访问授权可以通过授权插件进行扩展,您的
组织可以自行购买或构建。您可以安装一个或多个
authorization 插件。daemon
--authorization-plugin=PLUGIN_ID
$ sudo dockerd --authorization-plugin=plugin1 --authorization-plugin=plugin2,...
该值是插件的名称或其规范的路径
文件。插件的实现决定了您是可以指定 name 还是
路径。请咨询您的 Docker 管理员以获取有关
插件。PLUGIN_ID
安装插件后,通过
命令行或 Docker 的 Engine API件允许或拒绝。
如果您安装了多个插件,则每个插件必须按顺序
允许请求完成。daemon
有关如何创建授权插件的信息,请参阅 授权插件 部分。
守护程序用户命名空间选项
Linux 内核用户命名空间支持通过启用进程(即容器
具有唯一范围的用户 ID 和组 ID,这些 ID 位于传统 ID 之外
主机系统使用的 user 和 group 范围。最重要的之一
安全性改进是,默认情况下,以用户身份运行的容器进程具有预期的管理权限(有一些限制)
的 URL 中,但实际上会映射到
主机。root
uid
有关如何使用此功能以及限制的详细信息,请参阅隔离具有用户命名空间的容器。
配置主机网关 IP
Docker 守护程序支持 and 命令的标志的特殊值。此值解析为
主机的网关 IP,并允许容器连接到在
主机。host-gateway
--add-host
docker run
docker build
默认情况下,解析为默认网桥的 IP 地址。
您可以使用 dockerd 命令行界面的标志或
守护进程配置文件。host-gateway
--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.cdi
true
daemon.json
容器设备接口 (CDI) 是一种标准化机制,供容器运行时创建能够 与第三方设备交互。
Docker 守护程序支持使用 CDI 设备运行容器(如果请求 设备规范可在守护进程的文件系统上找到。
默认规范控制器为:
/etc/cdi/
对于静态 CDI 规范/var/run/cdi
对于生成的 CDI 规范
或者,您可以使用配置文件中的选项或 CLI 的标志来设置 CDI 规范的自定义位置。cdi-spec-dirs
daemon.json
--cdi-spec-dir
dockerd
{
"features": {
"cdi": true
},
"cdi-spec-dirs": ["/etc/cdi/", "/var/run/cdi"]
}
为守护程序启用 CDI 后,您可以查看配置的 CDI 规范
目录。docker info
守护程序日志记录格式
守护程序配置文件中的选项或 “log-format” 选项允许您设置守护程序生成的日志的格式。日志记录格式应
只能通过 命令行 选项或
通过配置文件中的 “log-format” 字段;同时使用
配置中的 command-line 选项和 “log-format” 字段
文件生成错误。如果未设置此选项,则默认值为 “text”。--log-format
--log-format
以下示例通过命令
line 选项来使用格式化的日志;--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 与 Internet 上的其他计算机通信。这可能会干扰一些
网络拓扑,并且可以使用 .--ip-masq=false
Docker 支持 Docker 数据目录 () 和
为。和 data 目录可以是
设置如下:/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 父级
用于容器。如果未设置此选项,则默认为
cgroupfs 驱动程序,以及 systemd cgroup 驱动程序。--cgroup-parent
/docker
system.slice
如果 cgroup 具有前导正斜杠 (),则会创建 cgroup
在根 cgroup 下,否则在 daemon 下创建 cgroup
cgroup 的/
假设守护进程在 cgroup 中运行,在 中创建 cgroup,而使用 在 中创建 cgroupdaemoncgroup
--cgroup-parent=/foobar
/sys/fs/cgroup/memory/foobar
--cgroup-parent=foobar
/sys/fs/cgroup/memory/daemoncgroup/foobar
systemd cgroup 驱动程序对 .systemd 系统
按切片表示层次结构,切片的名称对
树。因此,对于 systemd cgroups 来说,应该是一个 slice 名称。一个
name 可以由一系列以破折号分隔的名称组成,用于描述路径
从根切片到切片。例如,表示容器的内存 cgroup 是在 中创建的。--cgroup-parent
--cgroup-parent
--cgroup-parent=user-a-b.slice
/sys/fs/cgroup/memory/user.slice/user-a.slice/user-a-b.slice/docker-<id>.scope
也可以使用选项 on 和 为每个容器设置此设置,并优先于
守护程序上的选项。--cgroup-parent
docker create
docker run
--cgroup-parent
守护程序指标
该选项采用 TCP 地址来提供指标 API。
此功能仍处于实验阶段,因此,守护进程必须在 experimental 中运行
模式,以便此功能正常工作。--metrics-addr
要向您提供指标 API,您需要指定 ,
允许您在 API 上发出请求以接收 Prometheus 格式的指标。localhost:9323
--metrics-addr 127.0.0.1:9323
127.0.0.1:9323/metrics
Port 是与 Docker 关联的默认端口
指标以避免与其他 Prometheus 导出器和服务发生冲突。9323
如果您运行的是 Prometheus 服务器,则可以将此地址添加到您的抓取配置中 让 Prometheus 在 Docker 上收集指标。有关更多信息,请参阅使用 Prometheus 收集 Docker 指标。
Node 通用资源
该选项采用 key-value 列表
pair () 允许您公布用户定义的资源
在 Swarm 集群中。--node-generic-resources
key=value
当前预期用例是公布 NVIDIA GPU,以便服务
请求可以登陆具有足够 GPU 的节点
要运行的任务。NVIDIA-GPU=[0-16]
用法示例:
{
"node-generic-resources": [
"NVIDIA-GPU=UUID1",
"NVIDIA-GPU=UUID2"
]
}
在守护进程中启用功能 (--feature)
该选项允许您启用或禁用守护程序中的功能。
此选项对应于 daemon.json 配置文件中的 “features” 字段。
功能只能通过命令行进行配置
选项或通过配置文件中的“features”字段;同时使用
命令行选项和配置中的 “features” 字段
文件生成错误。可以多次指定 feature 选项
以配置多个功能。该选项接受 name 和
可选布尔值。省略该值时,默认值为 .--feature
--feature
--feature
true
以下示例在启用 and 功能的情况下运行守护程序。该选项提供了一个值;cdi
containerd-snapshotter
cdi
$ dockerd --feature cdi=true --feature containerd-snapshotter
以下示例是使用
文件;daemon.json
{
"features": {
"cdi": true,
"containerd-snapshotter": true
}
}
守护程序配置文件
该选项允许您设置任何配置选项
对于 JSON 格式的守护程序。此文件使用与键相同的标志名称,
除了允许多个条目的标志外,它使用复数
的标志名称,例如,对于标志。--config-file
labels
label
配置文件中设置的选项不得与设置的选项冲突
using flags 的 Flags 中。如果 Docker 守护程序之间的选项重复,则无法启动
文件和标志,无论它们的值如何。这是有意为之,并避免了
静默忽略 configuration reloaded 中引入的更改。
例如,如果您设置了守护程序标签,则守护程序将无法启动
,并通过 flag 设置 daemon 标签。
守护程序启动时,将忽略文件中不存在的选项。--label
该选项允许在没有
启动 Docker 守护程序。返回无效的非零退出代码
配置文件。--validate
$ 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 startup 作为标志。 在使用 systemd 启动 Docker 守护程序的系统上,已经设置好了,因此 您不能使用 Key In 添加侦听地址。 有关如何使用 systemd drop-in 文件配置守护程序的示例,请参阅自定义 Docker 守护程序选项。
daemon.json
-H
hosts
daemon.json
在 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
}
默认情况下,该选项未设置,在这种情况下,dockerd 会自动检测运行时。
此检测基于是否设置了标志。default-runtime
containerd
接受的值:
com.docker.hcsshim.v1
- 这是自首次添加 Windows 支持 Docker 以来一直使用的内置运行时,并在 Windows 中使用 v1 HCS API。io.containerd.runhcs.v1
- 这是使用 containerd 填充程序来运行容器,并在 Windows 中使用 v2 HCS API。runhcs
功能选项
中的可选字段允许您启用或禁用特定
守护进程功能。features
daemon.json
{
"features": {
"some-feature": true,
"some-disabled-feature-enabled-by-default": false
}
}
功能选项列表包括:
containerd-snapshotter
:设置为 时,守护程序使用 containerd snapshotters 而不是用于存储镜像和 容器数据。有关更多信息,请参阅 containerd 存储。true
windows-dns-proxy
:设置为 时,守护程序的内部 DNS 解析程序 将请求转发到外部服务器。如果没有这个,大多数应用程序 在容器中运行仍将能够使用辅助 DNS 服务器 配置,但无法解析 外部名称。当前默认值为 ,它将更改为 in 未来版本。此选项仅在 Windows 上允许。true
nslookup
false
true
警告
该功能标志将在将来的发行版中删除。
windows-dns-proxy
配置重新加载行为
当守护进程运行时,可以重新配置某些选项,而无需
以重新启动进程。守护进程使用 Linux 中的信号重新加载,
以及 Windows 中具有键 的全局事件。
您可以修改配置文件中的选项,但守护进程仍会
检查设置是否与指定的 CLI 标志冲突。守护程序失败
如果存在冲突,则重新配置自身,但它不会停止执行。SIGHUP
Global\docker-daemon-config-$PID
当前支持的可重新配置的选项列表如下:
选择 | 描述 |
---|---|
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
当您的守护进程对这些标志使用不同的值时,您可以在同一台主机上运行它们而不会出现任何问题。 了解这些选项的含义并正确使用它们非常重要。
- 该标志设置为 as default bridge network。
它是在安装 Docker 时自动创建的。
如果您不使用默认值,则必须手动创建和配置网桥,或将其设置为“none”:
-b, --bridge=
docker0
--bridge=none
--exec-root
是存储容器状态的路径。 默认值为 . 在此处指定正在运行的守护程序的路径。/var/run/docker
--data-root
是持久化数据(如镜像、卷和 cluster 状态。默认值为 .为避免任何 conflict with other daemon 时,请为每个守护进程单独设置此参数。/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 伪装规则,Docker 容器就无法 使用默认网桥以外的网络时连接到外部主机或 Internet。--ip-masq
true
--config-file=/etc/docker/daemon.json
是配置文件的存储路径。 您可以使用它来代替守护进程标志。指定每个守护程序的路径。--tls*
Docker 守护程序支持强制执行加密和身份验证远程连接的模式。 这些选项允许对单个守护程序使用特定证书。--tlsverify
--tls*
没有网络的 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
默认网络选项
配置文件中的 key 和
等效的 CLI 标志,允许您为
驱动程序网络 新网络的驱动程序选项。default-network-opts
daemon.json
--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"}
请注意,更改此守护进程配置不会影响预先存在的 网络。
使用 CLI 标志可用于测试和调试
目的,但您应该更喜欢将该文件用于持久性
守护程序配置。CLI 标志需要以下格式的值:,例如:--default-network-opt
daemon.json
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