本文将深入探讨如何通过daemon.json文件来自定义Docker守护进程选项,以优化Docker的性能和安全性

1、什么是daemon.json

daemon.json是Docker守护进程的配置文件,它允许用户自定义Docker的行为。通过修改这个文件,我们可以设置各种选项,如存储驱动、网络配置、日志管理等。默认情况下,daemon.json文件位于/etc/docker/目录下,但如果该文件不存在,Docker将使用默认配置。

2、常见的daemon.json配置选项

以下是 daemon.json 内容参数的分类解析: 更加详细内容见官方文档https://docs.docker.com/reference/cli/dockerd/#daemon-configuration-file

1. 基础与调试配置

  • debug:布尔值,默认 false。启用调试模式,输出详细的启动和运行信息,生产环境建议关闭。

  • log-level:字符串。控制 dockerd 的日志输出粒度,可选值为 debug, info, warn, error, fatal

  • experimental:布尔值,默认 false。启用 Docker 的实验性功能,因可能不稳定,不建议在生产环境使用。

  • pidfile:字符串,默认 /var/run/docker.pid。自定义 Docker 守护进程 PID 文件的存储路径。

  • labels:字符串数组。为 Docker 主机设置标签(如 ["nodeName=node-121"]),在集群管理中非常实用。

2. 存储与数据配置

  • data-root:字符串。Docker 运行时使用的数据根目录(Linux 默认 /var/lib/docker,Windows 默认 c:\programdata\docker)。常用于将数据迁移至大容量或高性能磁盘。(注:旧版本中的 graph 参数已废弃,现统一使用 data-root)

  • storage-driver:字符串。指定 Docker 的存储驱动类型,Linux 下推荐使用 overlay2,生产环境应避免使用 aufs

  • storage-opts:字符串数组。为存储驱动传递额外的选项。

  • exec-root:字符串。执行状态文件的根目录,默认为 /var/run/docker

3. 网络配置

  • bip:字符串。手动指定 docker0 网桥的 IP 地址及子网(如 172.17.0.1/16),用于避免与主机现有网络冲突。

  • bridge:字符串。将容器附加到指定的网桥。若设为 "none",Docker 将不创建默认的 NAT 网络。

  • default-gateway / default-gateway-v6:字符串。指定容器的默认 IPv4 / IPv6 网关(需在 bip 子网范围内)。

  • fixed-cidr / fixed-cidr-v6:字符串。限制分配给容器的固定 IP 的 IPv4 / IPv6 子网。

  • dns:字符串数组。设置容器默认的 DNS 服务器地址(如 ["8.8.8.8", "114.114.114.114"])。

  • dns-opts:字符串数组。配置容器 /etc/resolv.conf 文件中的其他 DNS 选项。

  • dns-search:字符串数组。设定容器的 DNS 搜索域。

  • mtu:数字。设置容器网络的最大传输单元(MTU)。

  • icc:布尔值,默认 true。控制是否启用容器间的内部通信。

  • ip-forward:布尔值,默认 true。启用系统的 net.ipv4.ip_forward 转发功能。

  • iptables:布尔值,默认 true。控制是否允许 Docker 添加 iptables 规则。

  • ip-masq:布尔值,默认 true。启用 IP 伪装(NAT)。

  • ipv6:布尔值,默认 false。启用 IPv6 网络支持。

  • ip:字符串,默认 0.0.0.0。绑定容器端口时的默认 IP 地址。

4. 镜像仓库与注册表配置

  • registry-mirrors:字符串数组。配置镜像加速器地址(必须为 HTTPS 协议),可显著提升国内拉取镜像的速度。

  • insecure-registries:字符串数组。允许使用 HTTP 协议或自签名证书的私有仓库地址。

  • disable-legacy-registry:布尔值。禁用对旧版 V1 注册表协议的支持。

5. 日志配置

  • log-driver:字符串。设置容器默认的日志驱动,常见选项包括 json-file(默认)、syslogjournaldfluentd 等。

  • log-opts:对象。配合日志驱动使用的选项。例如限制日志大小和文件数量以防磁盘撑满:{"max-size": "10m", "max-file": "3"}

  • raw-logs:布尔值,默认 false。以原始格式输出日志,不添加时间戳等元数据。

6. 安全与权限配置

  • hosts:字符串数组。设置 Docker 守护进程监听的地址(如 ["tcp://0.0.0.0:2375", "unix:///var/run/docker.sock"])。注意:暴露 TCP 端口不使用 TLS 存在严重安全风险。

  • tlsverify:布尔值。启用 TLS 验证。

  • tlscacert / tlscert / tlskey:字符串。分别指定 CA 证书、服务端证书和私钥的路径。

  • userns-remap:字符串。启用用户命名空间重映射,增强容器隔离安全性。

  • selinux-enabled:布尔值,默认 false。启用 SELinux 支持。

  • group:字符串。指定 Unix 套接字(/var/run/docker.sock)的属组,默认为 docker

  • authorization-plugins:字符串数组。指定要加载的授权插件列表。

  • default-ulimits:对象。设置容器的默认资源限制(ulimit)。

7. 运行时与高级配置

  • default-runtime:字符串,默认 runc。指定容器的默认 OCI 运行时。

  • runtimes:对象。注册自定义的 OCI 运行时及其路径和参数。

  • exec-opts:字符串数组。传递运行时执行选项(如配置 cgroup 驱动:["native.cgroupdriver=systemd"])。

  • cgroup-parent:字符串。为所有容器设置父 cgroup。

  • live-restore:布尔值。允许在 Docker 守护进程停止时保持容器运行,并在守护进程重启后恢复它们。

  • max-concurrent-downloads / max-concurrent-uploads:数字。限制并发下载/上传的层数,默认分别为 3 和 5。

  • oom-score-adjust:数字。调整 Docker 守护进程的 OOM(Out Of Memory)分数,防止其被系统轻易杀掉。

  • api-cors-header:字符串。在 Docker Engine API 中设置 CORS(跨域资源共享)标头。

  • cluster-store / cluster-advertise / cluster-store-opts:字符串/对象。用于配置 Swarm 集群的分布式存储后端及通告地址(旧版 Swarm 配置)。

配置生效提示:修改 daemon.json 后,通常需要重启 Docker 服务(如 Linux 下执行 systemctl restart docker)才能使配置生效。修改前建议备份原文件,若启动失败可通过查看系统日志(如 journalctl -u docker.service)排查 JSON 语法错误。

3、生产环境常用的daemon.json配置示例

{
  "data-root": "/data/docker",
  "storage-driver": "overlay2",
  "live-restore": true,
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3",
    "compress": "true"
  },
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://docker.m.daocloud.io"
  ],
  "insecure-registries": ["registry.internal.company.com:5000"],
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 5
}

核心配置项解析:

  • data-root:将 Docker 数据目录从默认的系统盘(/var/lib/docker)迁移至独立数据盘,防止系统盘被撑爆。

  • storage-driver:指定 overlay2 作为存储驱动,这是目前 Linux 下性能最佳、最稳定的驱动。

  • live-restore:生产环境必开选项。开启后,即使 Docker 服务重启或升级,运行中的容器也不会中断。

  • exec-opts:将 cgroup 驱动设置为 systemd,这是与 Kubernetes (K8s) 集成的兼容性要求。

  • log-opts:配置日志轮转策略。限制单个日志文件最大为 100MB,最多保留 3 个文件并开启压缩,防止日志无限增长耗尽磁盘空间。

  • registry-mirrors:配置国内镜像加速器,解决拉取 Docker Hub 镜像慢或超时的问题。

  • insecure-registries:允许访问 HTTP 协议或自签证书的内网私有镜像仓库。

  • max-concurrent-downloads/uploads:提高并发拉取和上传的线程数,加速镜像分发。