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/
概览
| 启动参数 | 描述 |
|---|---|
| –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=[] | 设置存储驱动的参数 |
Docker启动参数是指在启动Docker守护进程时,通过命令行或配置文件指定的参数。这些参数决定了Docker守护进程的初始化行为,包括存储路径、日志级别、网络配置等。正确配置启动参数可以显著提升Docker的性能和安全性。
dockerd是管理容器的持久化进程。Docker为守护程序和客户端使用不同的二进制文件。dockerd 守护进程的配置方式有两种:
- 配置文件
- 启动参数
配置文件详细官方说明: 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 规范。 |
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"
HTTP_PROXY
代理配置 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 守护程序默认提供未加密且未经过身份验证的直接访问权限。可以通过以下方式保护该守护程序:
- 内置HTTPS加密套接字
- 或在其前面放置一个安全的Web代理。
sudo dockerd -H tcp://192.168.59.106
您可以监听端口在所有网络接口上,也可以使用其IP地址在特定的网络接口上监听:通常使用端口用于未加密,以及端口用于与守护程序的加密通信。
注意
如果您使用的是 HTTPS 加密套接字,请注意,仅支持 TLS 1.0 及更高版本。出于安全考虑,不支持 SSLv3 及更低版本的协议。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
配置容器隔离技术(Windows)
对于Windows容器,您可以使用–exec-opt isolation标志指定要使用的默认容器隔离技术。
以下示例使用hyperv默认隔离技术:
dockerd --exec-opt isolation=hyperv
如果在守护进程启动时未指定隔离值,则在 Windows 客户端上,默认值为hyperv,在 Windows 服务器上,默认值为process.
在 HTTPS_PROXY 后台运行 Docker 守护进程
当在使用代理的局域网内运行时,代理的证书会替换 Docker Hub 的证书。这些证书必须添加到您的 Docker 主机的配置中:
为您的发行版安装ca-certificates软件包 向您的网络管理员索取代理的CA证书,并将其附加到/etc/pki/tls/certs/ca-bundle.crt 然后使用以下命令启动您的 Docker 守护程序:和是可选的——仅当您的代理设置为需要身份验证时才需要。 这仅会将代理和身份验证添加到 Docker 守护程序的请求中。要在构建镜像和运行容器时使用代理,请参阅配置 Docker 以使用代理服务器
默认ulimit设置
该标志可让您为所有容器设置默认选项。它采用与相同的选项。如果未设置这些默认值,则会从 Docker 守护程序继承设置。任何传递的选项都会覆盖守护程序默认值。
设置标志时请务必小心,因为Linux 的设计目的是为用户设置可用的最大进程数,而非容器。有关详细信息,请参阅参考文档。
守护进程用户命名空间选项
Linux 内核用户命名空间支持通过为进程(进而为容器)提供一组独特的用户和组 ID 范围,使其超出宿主机系统所使用的传统用户和组范围,从而增强了安全性。其中一项最重要的安全改进是,默认情况下,以运行的容器进程用户期望在容器内拥有管理权限(尽管存在一定限制),但实际上映射到主机上的非特权用户。
有关如何使用此功能以及限制的详细信息,请参阅使用用户命名空间隔离容器.
allow-direct-routing
--allow-direct-routing Allow remote access to published ports on container IP addresses
allow-nondistributable-artifacts
"allow-nondistributable-artifacts": [],//不对外分发的产品提交的registry仓库
authorization-plugins
访问授权
“authorization-plugins”: [], //访问授权插件
Docker 的访问授权可通过您的组织购买或自行构建的授权插件进行扩展。您可以在启动 Docker 时,使用daemon选项–authorization-plugin=PLUGIN_ID安装一个或多个授权插件。
sudo dockerd --authorization-plugin=plugin1 --authorization-plugin=plugin2,...
该值可以是插件的名称,也可以是其规范文件的路径。插件的实现决定了您能否指定名称或路径。请咨询您的 Docker 管理员,以获取有关可供您使用的插件的信息。
插件安装后,通过命令行或 Docker 引擎 API 发出的请求将由该插件允许或拒绝。如果您安装了多个插件,则必须按顺序让每个插件都允许该请求,才能使请求顺利完成。
有关如何创建授权插件的信息,请参阅授权插件部分。
add-runtime
add-runtime参数用于注册一个额外的 OCI 兼容运行时。
--add-runtime runtime Register an additional OCI compatible runtime (default [])
api-cors-header
"api-cors-header": "",//设置CORS(跨域资源共享-Cross-origin resource sharing)头
bip/bip6
"bip": "",//指定桥接ip
--bip string IPv4 address for the default bridge
--bip6 string IPv6 address for the default bridge
bridge
"bridge": "",//将容器依附(attach)到桥接网络上的桥标识
-b, –bridge string Attach containers to a network bridge
bridge-fdb-timeout string
--bridge-accept-fwmark string In bridge networks, accept packets with this firewall mark/mask
cdi-spec-dir/cdi-spec-dirs
配置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"
}
--cdi-spec-dir list CDI specification directories to use
cgroup-parent
"cgroup-parent": "",//设置所有容器的cgroup的父类(?)
--cgroup-parent string Set parent cgroup for all containers
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选项。
config-file
--config-file string Daemon configuration file (default "/etc/docker/daemon.json")
–config-file=/etc/docker/daemon.json是存储配置文件的路径。您可以使用它代替守护进程标志。为每个守护进程指定路径。
该–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 上允许的配置选项的完整示例:
注意 您无法在daemon.json中设置已在守护进程启动时作为标志设置的选项。在使用 systemd 启动 Docker 守护进程的系统上,-H已设置,因此您无法在hosts中使用daemon.json键来添加监听地址。请参阅自定义 Docker 守护进程选项有关如何使用 systemd 下拉文件配置守护进程的示例。
在 Windows 上 Windows 上配置文件的默认位置是%programdata%\docker\config\daemon.json。使用–config-file标志指定非默认位置。
以下是 Windows 上允许的配置选项的完整示例:
{ “bridge”: “”, “containerd”: “\\.\pipe\containerd-containerd”, “containerd-namespace”: “docker”, “containerd-plugins-namespace”: “docker-plugins”, “debug”: true, “default-network-opts”: {}, “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, “shutdown-timeout”: 15, “storage-driver”: “”, “storage-opts”: [], “swarm-default-advertise-addr”: “”, “tlscacert”: “”, “tlscert”: “”, “tlskey”: “”, “tlsverify”: true }
接受的值:
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 指定守护程序应视为不安全的镜像仓库列表。 shutdown-timeout 使用新的超时时间配置守护进程现有的配置超时,以关闭所有容器。\
containerd
--containerd string containerd grpc address
containerd-namespace
--containerd-namespace string Containerd namespace to use (default "moby")
containerd-plugins-namespace
--containerd-plugins-namespace string Containerd namespace to use for plugins (default "plugins.moby")
cpu-rt-period
--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
--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
--cri-containerd start containerd with cri
cluster-store
"cluster-store": "",//集群存储系统的URL
cluster-store-opts
"cluster-store-opts": {},//配置集群存储
cluster-advertise
"cluster-advertise": "",//对外的地址名称
data-root
data-root 设置 Docker 数据持久化存储的根目录,用于存储镜像、Volume和集群状态等持久化数据的路径,也是Docker最消耗磁盘存储的目录。默认值为 /var/lib/docker。
注意
如果在同一台机器运行多套 dockerd时,为避免与其他守护进程发生冲突,请为每个守护进程单独设置此参数。data-root 支持两种设置方式:
- daemon.json配置
{ "data-root": "/data/docker", } - 命令行选项
如
--data-root string Root directory of persistent Docker state (default "/var/lib/docker")dockerd --data-root /data/docker
debug
"debug": true,//开启调试模式
-D, –debug Enable debug mode
default-address-pool
--default-address-pool pool-options Default address pools for node specific local networks
default-cgroupns-mode
--default-cgroupns-mode string Default mode for containers cgroup namespace ("host" | "private") (default "private")
default-gateway
"default-gateway": "",//默认网关
--default-gateway ip Default gateway IPv4 address for the default bridge network
default-gateway-v6
"default-gateway-v6": "",//默认ipv6网关
--default-gateway-v6 ip Default gateway IPv6 address for the default bridge network
default-ipc-mode
--default-ipc-mode string Default mode for containers ipc ("shareable" | "private") (default "private")
default-network-opt
--default-network-opt mapmap Default network options (default map[])
default-runtime
default-runtime 指定容器默认使用的运行时。
"default-runtime": "runc", //OCI联盟(The Open Container Initiative)默认运行时环境
--default-runtime string Default OCI runtime for containers (default "runc")
default-shm-size
"default-shm-size": "64M",//设置默认共享内存的大小
--default-shm-size bytes Default shm size for containers (default 64MiB)
default-ulimits
"default-ulimits": {},//设置所有容器的ulimit
--default-ulimit ulimit Default ulimits for containers (default [])
该default-runtime选项默认未设置,在这种情况下,dockerd 会自动检测运行时。此检测基于是否设置了containerd标志。
作用:设置容器的默认资源限制。
示例:
dockerd --default-ulimit nofile=1024:2048
说明:--default-ulimit参数用于设置容器的默认资源限制,如文件描述符数量、CPU时间等。通过合理配置资源限制,可以防止容器占用过多系统资源。
守护进程 DNS
要为所有 Docker 容器设置 DNS 服务器,请使用:
sudo dockerd --dns 8.8.8.8
要为所有 Docker 容器设置 DNS 搜索域,请使用:
sudo dockerd --dns-search example.com
dns
dns参数用于配置容器默认使用的DNS服务器。通过指定多个DNS服务器,可以提高容器的网络解析能力。
dockerd --dns 8.8.8.8 --dns 8.8.4.4
dns-opts
dns-opts DNS配置选项,如端口等
"dns-opts": [],
dns-search
dns-search DNS搜索域名
"dns-search": [],
exec-opt
--exec-opt list Runtime execution options
"exec-opts": [],//执行选项
exec-root
--exec-root string Root directory for execution state files (default "/var/run/docker")
"exec-root": "",//执行状态的文件的根目录
–exec-root是存储容器状态的路径。默认值为/var/run/docker。请在此处指定您正在运行的守护程序的路径。
experimental
"experimental": false,//是否开启试验性特性
--experimental Enable experimental features
features
在守护进程中启用功能(–feature)
features 启用或禁用特定功能。 运行多个守护进程 注意 在单个主机上运行多个守护进程被视为实验性功能。您可能会遇到尚未解决的问题,在某些情况下,系统可能无法按预期工作。
该–feature选项可让您在守护进程中启用或禁用某个功能。此选项与daemon.json 配置文件中的“features”字段相对应。功能只能通过–feature命令行选项或配置文件中的“features”字段进行配置;同时使用命令行选项和配置文件中的“features”字段会导致错误。可以多次指定功能选项,以配置多个功能。该–feature选项接受一个名称和可选的布尔值。省略该值时,默认值为true.
以下示例使用了启用的和功能运行守护进程。选项附带一个值;
dockerd --feature cdi=true --feature containerd-snapshotter
以下示例是使用daemon.json配置文件的等效示例;
{
"features": {
"cdi": true,
"containerd-snapshotter": true
}
}
--feature map Enable feature in the daemon
firewall-backend
--firewall-backend string Firewall backend to use, iptables or nftables
fixed-cidr
"fixed-cidr": "",//(ipv4)子网划分,即限制ip地址分配范围,用以控制容器所属网段实现容器间(同一主机或不同主机间)的网络访问
--fixed-cidr string IPv4 subnet for the default bridge network
fixed-cidr-v6
"fixed-cidr-v6": "",//(ipv6)子网划分
--fixed-cidr-v6 string IPv6 subnet for the default bridge network
group
"group": "",//docker所在组
-G, –group string Group for the unix socket (default “docker”)
help
--help Print usage
hosts
"hosts": [],//监听地址(?)
–host=[]指定Docker守护进程监听客户端连接的地址。如果未指定,则默认为/var/run/docker.sock.
--host参数用于指定Docker守护进程监听的地址和端口。
默认情况下,Docker守护进程监听Unix套接字unix:///var/run/docker.sock。通过--host参数,可以配置Docker守护进程监听TCP端口,以便远程访问。
dockerd --host tcp://0.0.0.0:2375
-H, –host list Daemon socket(s) to connect to
host-gateway-ip
配置主机网关IP
--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
"host-gateway-ip": "", //docker0网卡的ipv4地址
Docker 守护程序支持标志的特殊值,用于和命令。此值会解析为主机上的地址,以便容器能够连接到在主机上运行的服务。
默认情况下,host-gateway解析为默认网桥的 IPv4 地址,如果该网桥有 IPv6 地址,则解析为其 IPv6 地址。
您可以使用 dockerd 命令行界面的–host-gateway-ip标志,或守护进程配置文件中的host-gateway-ip键,将此配置为解析到不同的 IP。
<b要在命令行上同时提供 IPv4 和 IPv6 地址,请使用两个–host-gateway-ip选项。
要在守护进程配置文件中提供地址,请使用JSON 数组,如下所示。为与旧版守护进程兼容,也可将单个 IP 地址指定为选项中的 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
http-proxy
--http-proxy string HTTP proxy URL to use for outgoing traffic
https-proxy
--https-proxy string HTTPS proxy URL to use for outgoing traffic
icc
"icc": false,//容器间通信
icc参数用于控制容器间的网络通信。默认情况下,Docker允许容器间自由通信。通过设置--icc=false,可以禁止容器间的网络通信,提高安全性。
dockerd --icc=false
"tlsverify": true,//开启输层安全协议并验证远程地
--icc Enable inter-container communication for the default bridge network (default true)
init
"init": false,//容器执行初始化,来转发信号或控制(reap)进程
--init Run an init in the container to forward signals and reap processes
init-path
"init-path": "/usr/libexec/docker-init",//docker-init文件的路径
--init-path string Path to the docker-init binary
ip
"ip": "0.0.0.0",//默认IP
--ip ip Host IP for port publishing from the default bridge network (default 0.0.0.0)
ip-forward
"ip-forward": false,//开启net.ipv4.ip_forward
--ip-forward Enable IP forwarding in system configuration (default true)
ip-forward-no-drop
--ip-forward-no-drop Do not set the filter-FORWARD policy to DROP when enabling IP forwarding
ip-masq
--ip-masq Enable IP masquerading for the default bridge network (default true)
ip6tables
--ip6tables Enable addition of ip6tables rules (default true)
iptables
"iptables": false,//开启防火墙规则
--iptables Enable addition of iptables rules (default true)
–iptables=false可防止 Docker 守护进程添加 iptables 规则。如果多个守护进程管理 iptables 规则,它们可能会覆盖其他守护进程所设置的规则。请注意,禁用此选项后,您需要手动添加 iptables 规则以公开容器端口。如果您阻止 Docker 添加 iptables 规则,Docker 也不会添加 IP 地址伪装规则,即使您已将其设置为–ip-masq。true如果没有 IP 地址伪装规则,Docker 容器在使用默认网桥以外的网络时,将无法连接到外部主机或互联网。
ipv6
"ipv6": false,//开启IPV6网络
--ipv6 Enable IPv6 networking for the default bridge network
ip-masq
"ip-masq": false,//开启ip掩蔽(IP封包通过路由器或防火墙时重写源IP地址或目的IP地址的技术)
IP伪装使用地址转换,使没有公共IP的容器能够与互联网上的其他设备通信。这可能会干扰某些网络拓扑结构,可通过以下方式禁用–ip-masq=false.
insecure-registry
insecure-registry 设置不安全的镜像仓库,一般用于自建镜像仓库没有 HTTPS 证书或者自签名证书的镜像仓库没有正确配置CA证书路径。
对于不安全的镜像仓库,执行 docker pull, docker push, 以及 docker search 会出现错误消息,提示用户要么使该镜像仓库安全,要么将--insecure-registry标志传递给 Docker 守护程序。
启用--insecure-registry,即允许未加密和/或不受信任的通信,在运行本地镜像仓库时可能很有用。但由于启用该功能会带来安全漏洞,因此仅应将其用于测试目的。为提高安全性,用户应将自身的CA添加到系统受信任CA列表中,而非启用--insecure-registry.
该标志可多次使用,以将多个镜像仓库标记为不安全。
自 Docker 1.3.2 起,本地镜像仓库的 IP 地址若位于 127.0.0.0/8 范围内,将被自动标记为不安全。不建议依赖此行为,因为它未来可能会发生变化。
旧版镜像仓库
现已不再支持针对仅支持旧版 v1 协议的镜像仓库的操作。具体而言,守护程序不会尝试向 v1 镜像仓库推送、拉取或登录。不过,以下情况除外:search仍可在 v1 镜像仓库上执行这些操作。- daemon.json配置
{ "insecure-registry": ["myregistry:5000","harbor.example.com"] } - 命令行选项
--insecure-registry list Enable insecure registry communication
Docker 将私有镜像仓库视为安全或不安全。安全的镜像仓库使用 TLS,其 CA 证书的副本会放置在 Docker 主机上(合规证书的CA默认已经存在在操作系统中)。
/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 语法描述的子网,应被视为不安全。
labels
--label list Set key=value labels to the daemon
"labels": [],//键值对式标记docker元数据
live-restore
--live-restore Enable live restore of docker when containers are still running
"live-restore": true,//dockerd挂掉是否保活容器(避免了docker服务异常而造成容器退出)
log-driver
--log-driver string Default driver for container logs (default "json-file")
"log-driver": "",//容器日志的驱动器
log-format
--log-format string Set the logging format ("text"|"json") (default "text")
log-level
"log-level": "",//日志级别
-l, –log-level string Set the logging level (“debug”|“info”|“warn”|“error”|“fatal”) (default “info”)
log-opt
--log-opt map Default log driver options for containers (default map[])
"log-opts": {},//容器日志的选项
max-concurrent-downloads
"max-concurrent-downloads": 3,//设置每个pull进程的最大并发
--max-concurrent-downloads int Set the max concurrent downloads (default 3)
max-concurrent-uploads
"max-concurrent-uploads": 5,//设置每个push进程的最大并发
--max-concurrent-uploads int Set the max concurrent uploads (default 5)
max-download-attempts
--max-download-attempts int Set the max download attempts for each pull (default 5)
metrics-addr
--metrics-addr string Set default address and port to serve the metrics api on
mtu
"mtu": 0,//设置容器网络MTU(最大传输单元)
--mtu int Set the MTU for the default "bridge" network (default 1500)
network-control-plane-mtu
--network-control-plane-mtu int Network Control plane MTU (default 1500)
no-new-privileges
“no-new-privileges”: false,//禁止新优先级(??) –no-new-privileges Set no-new-privileges by default for new containers
no-proxy
--no-proxy string Comma-separated list of hosts or IP addresses for which the proxy is skipped
node-generic-resources
"node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],//对外公布的资源节点
--node-generic-resource list Advertise user-defined resource
Node generic resources 该选项接受键值对列表(),允许您在 Swarm 集群中推广用户定义的资源。
当前预期的用例是宣传NVIDIA GPU,以便请求服务NVIDIA-GPU=[0-16]能够部署到具备足够GPU以运行该任务的节点上。
使用示例:
{
"node-generic-resources": [
"NVIDIA-GPU=UUID1",
"NVIDIA-GPU=UUID2"
]
}
oom-score-adjust
"oom-score-adjust": -500,//内存溢出被杀死的优先级(-1000~1000)
pidfile
"pidfile": "",//daemon PID文件的位置
-p, –pidfile string Path to use for daemon PID file (default “/var/run/docker.pid”)
-p, –pidfile=/var/run/docker.pid是守护进程的进程ID存储的路径。请在此处指定您的PID文件路径。
raw-logs
"raw-logs": false,//原始日志(无颜色、全时间戳)
--raw-logs Full timestamps without ANSI coloring
registry-mirrors
registry-mirrors 配置 镜像仓库镜像(mirror of registry) 列表,一般用于加速镜像拉取速度。
在搭建了 Docker Hub 镜像仓库代理服务之后,通过该代理服务访问如 Docker Hub 镜像仓库,从而加速镜像拉取速度。
-
daemon.json配置
{ "registry-mirrors": ["https://docker.m.ixdev.cn/"] }–registry-mirror list Preferred registry mirror
rootless
--rootless Enable rootless mode; typically used with RootlessKit
runtime
runtime 运行时选项。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
- daemon.json配置
"runtimes": {//运行时
"cc-runtime": {
"path": "/usr/bin/cc-runtime"
},
"custom": {
"path": "/usr/local/bin/my-runc-replacement",
"runtimeArgs": [
"--debug"
]
}
}
}
未实现 containerd shim 的容器运行时,或安装在之外的 containerd shim,必须通过配置文件或使用命令行标志向守护进程注册。
有关如何使用其他容器运行时的示例,请参阅替代容器运行时
使用以下方式配置运行时daemon.json
要使用守护程序的配置文件注册和配置容器运行时,请在runtimes:
条目的键(
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 如果您要注册的运行时实现了一个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
设置此选项适用于守护程序启动的所有容器。
seccomp-profile
"seccomp-profile": "",//seccomp配置文件
--seccomp-profile string Path to seccomp profile. Set to "unconfined" to disable the default seccomp profile (default "builtin")
selinux-enabled
"selinux-enabled": false,//开启selinux(用户、进程、应用、文件的强制访问控制)
--selinux-enabled Enable selinux support
shutdown-timeout
"shutdown-timeout": 15,//设置关闭的超时时限(who?)
--shutdown-timeout int Set the default shutdown timeout (default 15)
storage-driver
-s, –storage-driver string Storage driver to use
storage-driver 配置镜像层存储驱动程序。选择合适的存储驱动可以显著提升Docker的性能和稳定性。
在 Linux 上,Docker 守护程序支持多种不同的镜像层存储驱动程序:overlay2, fuse-overlayfs, btrfs, aufs, 和 zfs等。overlay2 是当前所有受支持的Linux发行版的首选存储驱动程序,默认就是 overlay2。
在 Windows 上,Docker 守护程序仅支持 windowsfilter 存储驱动程序。
除非用户有充分理由偏好其他存储驱动程序,否则建议优先选择推荐的存储驱动程序。
可以通过三种方式配置存储驱动,建议通过 daemon.json 配置管理:
-
环境变量方式
通过在
docker.service文件中设置DOCKER_DRIVER环境变量来设置存储驱动程序。DOCKER_DRIVER: 要使用的存储驱动程序 -
daemon.json方式
"storage-driver": "",//存储驱动器 -
命令行选项方式
dockerd --storage-driver overlay2
storage-opt
storage-opts 存储选项。对 storage 指定的存储驱动,不同的存储驱动有自己的选项配置。
--storage-opt list Storage driver options
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
swarm-default-advertise-addr
"swarm-default-advertise-addr": "",//swarm对外地址
--swarm-default-advertise-addr string Set default address or interface for swarm advertised address
tls
"tls": true,//开启传输层安全协议TLS
--tls Use TLS; implied by --tlsverify
–tlsDocker 守护程序支持–tlsverify强制实施加密和身份验证的远程连接模式。这些–tls选项允许为各个守护程序使用特定的证书。
tlscacert
"tlscacert": "",//CA签名文件路径
--tlscacert string Trust certs signed only by this CA (default "~/.docker/ca.pem")
tlscert
“tlscert”: “”,//TLS证书文件路径 –tlscert string Path to TLS certificate file (default “~/.docker/cert.pem”)
tlskey
“tlskey”: “”,//TLS密钥文件路径 –tlskey string Path to TLS key file (default “~/.docker/key.pem”)
tlsverify
作用:启用TLS加密通信,确保Docker客户端与守护进程之间的安全连接。
示例:
dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem
说明:--tlsverify参数用于启用TLS加密通信,确保Docker客户端与守护进程之间的安全连接。启用TLS后,客户端必须提供有效的证书才能与Docker守护进程通信。
--tlsverify Use TLS and verify the remote
userland-proxy
"userland-proxy": false,//用户空间代理
--userland-proxy Use userland proxy for loopback traffic (default true)
userland-proxy-path
"userland-proxy-path": "/usr/libexec/docker-proxy",//用户空间代理路径
--userland-proxy-path string Path to the userland proxy binary
userns-remap
"userns-remap": "",//给用户命名空间设置 用户/组
--userns-remap string User/Group setting for user namespaces
validate
--validate Validate daemon configuration and exit
version
-v, –version Print version information and quit