Docker 系列(五十):服务端命令 dockerd

dockerd 是 Docker 的服务端守护进程,负责镜像管理、容器的创建与运行,以及网络、存储等核心工作。一般情况下,dockerd 由系统的 systemd 服务(服务名通常为 docker)托管,无需手动启动;但在调试或定制配置时,了解它的命令行选项会很有帮助。

命令格式

Usage:  dockerd [OPTIONS]

A self-sufficient runtime for containers.

可以通过 dockerd --help 查看全部选项。下面按功能分类整理常用选项。

网络相关选项

| 选项 | 说明 |
| --bridge string | 指定容器所挂载的网桥,默认为 docker0;设为 none 则禁用容器网络 |
| --bip string | 指定网桥的 IP 地址与子网掩码(CIDR,如 192.168.1.5/24) |
| --default-gateway ip | 指定容器的默认网关(IPv4) |
| --default-gateway-v6 ip | 指定容器的默认网关(IPv6) |
| --fixed-cidr string | 限定从网桥子网中分配给容器的 IPv4 地址段 |
| --fixed-cidr-v6 string | 限定分配给容器的 IPv6 地址段 |
| --ip string | 绑定容器端口时使用的默认 IP(默认 0.0.0.0) |
| --ip-forward | 开启 net.ipv4.ip_forward 转发(默认开启) |
| --ip-masq | 开启容器访问外网时的 IP 伪装(默认开启) |
| --iptables | 允许 dockerd 管理 iptables 规则(默认开启) |
| --ipv6 | 开启 IPv6 网络 |
| --mtu int | 容器网络的 MTU(默认 1500) |
| --default-address-pool | 自定义默认网络地址池 |

存储相关选项

| 选项 | 说明 |
| -s, --storage-driver string | 指定存储驱动,如 overlay2 |
| --storage-opt list | 设置存储驱动选项 |
| --data-root string | 持久化数据(镜像、容器等)的根目录(默认 /var/lib/docker) |
| --exec-root string | 存放临时执行状态的目录(默认 /var/run/docker) |
| --userns-remap string | 开启用户命名空间重映射 |

日志与调试选项

| 选项 | 说明 |
| -D, --debug | 开启调试模式 |
| -l, --log-level string | 日志级别(debug、info、warn、error、fatal) |
| --log-driver string | 容器默认日志驱动(默认 json-file) |
| --log-opt map | 日志驱动选项 |
| --raw-logs | 以原始 JSON 格式输出日志,不做格式化 |

运行时相关选项

| 选项 | 说明 |
| --add-runtime list | 注册额外的符合 OCI 规范的运行时 |
| --default-runtime string | 默认运行时(默认 runc) |
| --exec-opt list | 运行时执行选项 |
| --cgroup-parent string | 指定容器的 cgroup 父组 |
| --cpu-rt-period int | 实时调度的周期(微秒) |
| --cpu-rt-runtime int | 一个周期内实时任务的运行时间配额 |
| --default-shm-size bytes | 容器共享内存大小(默认 64M) |
| --default-ulimit ulimit | 容器默认的 ulimit 值 |
| --init | 在容器内使用 init 进程转发信号、回收僵尸进程 |
| --init-path string | docker-init 二进制文件路径 |
| --live-restore | 守护进程重启期间保持容器继续运行 |
| --oom-score-adjust int | 调整守护进程的 OOM 评分 |
| --seccomp-profile string | seccomp 配置文件路径 |
| --selinux-enabled | 开启 SELinux 支持 |
| --shutdown-timeout int | 关闭时的默认超时时间(秒,默认 15) |
| --max-concurrent-downloads int | 每层镜像的最大并发下载数(默认 3) |
| --max-concurrent-uploads int | 每层镜像的最大并发上传数(默认 5) |
| --metrics-addr string | 暴露 Prometheus 指标的监听地址 |

镜像与仓库选项

| 选项 | 说明 |
| --insecure-registry list | 允许访问不安全的(如自签证书的)镜像仓库 |
| --registry-mirror list | 镜像仓库加速地址 |
| --allow-nondistributable-artifacts list | 允许推送/拉取受限分发的制品 |

远程访问与安全选项

| 选项 | 说明 |
| -H, --host list | 监听的套接字,如 unix:///var/run/docker.sock、tcp://0.0.0.0:2375,可指定多个 |
| --api-cors-header string | 为 Engine API 设置 CORS 响应头 |
| --tls | 开启 TLS |
| --tlscacert string | 仅信任该 CA 签发的证书 |
| --tlscert string | 服务端证书路径 |
| --tlskey string | 服务端密钥路径 |
| --tlsverify | 双向认证,校验客户端证书 |
| --authorization-plugin list | 加载授权插件 |
| --group string | docker.sock 的所属组(默认 docker) |
| --icc | 是否允许容器间互联(默认允许) |
| --userland-proxy | 使用用户态代理处理回环流量(默认开启) |
| --userland-proxy-path string | 用户态代理程序路径 |
| --node-generic-resource list | 声明节点通用资源(供 swarm 调度使用) |

其他选项

| 选项 | 说明 |
| -p, --pidfile string | PID 文件路径(默认 /var/run/docker.pid) |
| --config-file string | 守护进程配置文件路径(默认 /etc/docker/daemon.json) |
| --label list | 为守护进程添加键值对标签 |
| --label-file list | 从文件读取标签 |
| --dns list | 容器默认使用的 DNS 服务器 |
| --dns-search list | 容器默认的 DNS 搜索域 |
| --dns-opt list | 容器默认的 DNS 选项 |
| --experimental | 开启实验特性 |
| -v, --version | 打印版本信息并退出 |

旧版本中还提供 --cluster-advertise、--cluster-store、--cluster-store-opt 等用于经典 Swarm 集群的选项,新版本中已经移除。

配置文件

除命令行参数外,dockerd 的绝大多数选项都可以写入配置文件 /etc/docker/daemon.json(可通过 --config-file 指定其他路径),例如:

{
  "debug": true,
  "data-root": "/data/docker",
  "registry-mirrors": ["https://<mirror-host>"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

注意 JSON 中的键名与命令行选项并不完全一致(例如命令行的 --registry-mirror 对应配置文件中的 registry-mirrors)。修改配置文件后,需要重启守护进程才能生效。

启动示例

一般使用 systemd 管理服务:

$ sudo systemctl start docker
$ sudo systemctl enable docker

调试时可以前台以调试模式启动:

$ sudo dockerd -D

也可以在启动时直接指定存储目录与镜像加速地址:

$ sudo dockerd --data-root /data/docker --registry-mirror=https://<mirror-host>

注意:默认情况下 dockerd 只监听本地的 unix:///var/run/docker.sock。如果通过 -H 参数开放 TCP 端口(如 tcp://0.0.0.0:2375),所有能够访问该端口的客户端都可以控制 Docker,务必配合 --tls 系列参数启用 TLS 认证。

系列导航


   转载规则


《Docker 系列(五十):服务端命令 dockerd》 由 吴杭沉 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Docker 系列(五十一):客户端命令 docker Docker 系列(五十一):客户端命令 docker
docker 客户端是与 Docker 守护进程交互的最主要方式,基本命令格式为: docker [OPTIONS] COMMAND [ARG...] 可以通过 docker COMMAND --help 来查看这些命令的具体用法。 Doc
2023-08-01
下一篇 
Docker 系列(四十九):如何调试 Docker Docker 系列(四十九):如何调试 Docker
排查 Docker 相关问题时,一般可以从开启守护进程的调试日志入手,必要时还可以查看守护进程的运行时堆栈,或者在数据可以丢弃的情况下彻底重置本地数据。本篇介绍这几种常用的调试手段。 开启调试日志在 dockerd 配置文件 daemon.
2023-07-18
  目录