daemon.json

daemon.json 是 Docker 守护进程(dockerd)的配置文件,用于定义全局参数如镜像加速、存储驱动、日志级别等。

官方配置文件说明: https://docker.website.cncfstack.com/reference/cli/dockerd/#on-linux

该文件通常位于以下路径:

  • Linux: /etc/docker/daemon.json
  • Windows: C:\ProgramData\docker\config\daemon.json%programdata%\docker\config\daemon.json
  • macOS: 通过 Docker Desktop 界面配置(偏好设置 → Docker Engine),实际保存路径为隐藏文件,不建议手动修改。

该文件在默认安装时可能不存在,需要手动创建。

配置文件样例

以下是 Docker 26.1.3 版本配置。

配置文件修改后需要重启 dockerd 服务才能生效。

注意:

  1. 不同 Docker 版本中配置文件的变化可能会影响配置的兼容性。在升级 Docker 时,建议检查 daemon.json 的配置项是否与新版本兼容。
  2. 从旧版本迁移到新版本时,可能需要调整配置文件。例如,某些配置项可能已被弃用或替换。
{
  "allow-direct-routing": false, //允许直接路由
  "authorization-plugins": [], //访问授权插件
  "bip": "", //指定桥接ip,ipv4
  "bip6": "", //指定桥接ip, ipv6
  "bridge": "", //将容器依附(attach)到桥接网络上的桥标识
  "bridge-accept-fwmark": "", // 桥接网络中的网桥标识
  "builder": { // 构建器,用于 docker build/buildx 命令
    "gc": {
      "enabled": true,
      "defaultReservedSpace": "10GB",
      "policy": [
        { "maxUsedSpace": "512MB", "keepDuration": "48h", "filter": [ "type=source.local" ] },
        { "reservedSpace": "10GB", "maxUsedSpace": "100GB", "keepDuration": "1440h" },
        { "reservedSpace": "50GB", "minFreeSpace": "20GB", "maxUsedSpace": "200GB", "all": true }
      ]
    }
  },
  "cgroup-parent": "", //设置所有容器的cgroup的父类
  "containerd": "/run/containerd/containerd.sock", // containerd的socket
  "containerd-namespace": "docker", //docker的containerd的namespace
  "containerd-plugins-namespace": "docker-plugins",
  "data-root": "", //docker数据持久化存储的根目录
  "debug": true, //开启调试模式
  "default-address-pools": [ //设置默认的ip地址池
    {
      "base": "172.30.0.0/16",
      "size": 24
    },
    {
      "base": "172.31.0.0/16",
      "size": 24
    }
  ],
  "default-cgroupns-mode": "private", //设置默认的cgroupns模式
  "default-gateway": "", //默认网关
  "default-gateway-v6": "", //默认ipv6网关
  "default-network-opts": {}, // 默认网络参数
  "default-runtime": "runc", //OCI联盟(The Open Container Initiative)默认运行时环境
  "default-shm-size": "64M", //设置默认共享内存的大小
  "default-ulimits": { //设置所有容器的ulimit
    "nofile": {
      "Hard": 64000,
      "Name": "nofile",
      "Soft": 64000
    }
  },
  "dns": [],//DNS服务器
  "dns-opts": [],//DNS配置选项,如端口等
  "dns-search": [],//DNS搜索域名
  "exec-opts": [],//执行选项
  "exec-root": "",//执行状态的文件的根目录
  "experimental": false,//是否开启试验性特性
  "features": { //特性开关
    "cdi": true, // CDI功能是容器数据格式,用于存储容器数据,全称称为Container Data Interface
    "containerd-snapshotter": true // containerd-snapshotter功能是snapshotter功能,用于存储容器数据
  },
  "firewall-backend": "", //防火墙后端
  "fixed-cidr": "", //(ipv4)子网划分,即限制ip地址分配范围,用以控制容器所属网段实现容器间(同一主机或不同主机间)的网络访问
  "fixed-cidr-v6": "", //(ipv6)子网划分
  "group": "", //docker所在组
  "host-gateway-ip": "", //docker0网卡的ipv4地址
  "hosts": [], //监听地址,默认0.0.0.0
  "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, //容器执行初始化,来转发信号或控制(reap)进程
  "init-path": "/usr/libexec/docker-init", //docker-init文件的路径
  "insecure-registries": [], //非https的registry地址
  "ip": "0.0.0.0", //默认监听IP地址,0.0.0.0表示所有接口
  "ip-forward": false, //开启net.ipv4.ip_forward=1
  "ip-masq": false, //开启ip掩蔽(IP封包通过路由器或防火墙时重写源IP地址或目的IP地址的技术)
  "iptables": false, //开启防火墙规则
  "ip6tables": false, //开启IPV6防火墙规则
  "ipv6": false, //开启IPV6网络
  "labels": [],//键值对式标记docker元数据
  "live-restore": true,//dockerd挂掉是否保活容器(避免了docker服务异常而造成容器退出)
  "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, //设置每个pull进程的最大并发
  "max-concurrent-uploads": 5, //设置每个push进程的最大并发
  "max-download-attempts": 5, //设置pull进程下载失败的最大尝试次数
  "mtu": 0, //设置容器网络MTU(最大传输单元),为0 表示使用系统默认值
  "no-new-privileges": false, //设置容器是否禁止设置新的权限
  "node-generic-resources": [ //对外公布的资源节点
    "NVIDIA-GPU=UUID1",
    "NVIDIA-GPU=UUID2"
  ],
  "pidfile": "", //daemon PID文件的位置
  "raw-logs": false, //原始日志(无颜色、全时间戳)
  "registry-mirrors": [], //registry仓库镜像
  "runtimes": {
    "cc-runtime": {
      "path": "/usr/bin/cc-runtime"
    },
    "custom": {
      "path": "/usr/local/bin/my-runc-replacement",
      "runtimeArgs": [
        "--debug"
      ]
    }
  },
  "seccomp-profile": "", //seccomp配置文件
  "selinux-enabled": false, //开启selinux(用户、进程、应用、文件的强制访问控制)
  "shutdown-timeout": 15, //设置关闭的超时时限
  "storage-driver": "",//存储驱动器
  "storage-opts": [],//存储选项
  "swarm-default-advertise-addr": "", //swarm对外地址
  "tls": true,//开启传输层安全协议TLS
  "tlscacert": "",//CA签名文件路径
  "tlscert": "",//TLS证书文件路径
  "tlskey": "",//TLS密钥文件路径
  "tlsverify": true,//开启输层安全协议并验证远程地址
  "userland-proxy": false, //用户空间代理
  "userland-proxy-path": "/usr/libexec/docker-proxy", //用户空间代理路径
  "userns-remap": "" //给用户命名空间设置 用户/组
}

常用配置项解析

insecure-registries

insecure-registries 用于允许 Docker 使用非 HTTPS 的镜像仓库, 或者是不安全的自签名证书的镜像仓库。

示例配置:

{
  "insecure-registries": ["myregistry.local:5000"]
}

注意:这里镜像仓库的域名必须使用全小写,否则 Docker 将无法识别。并且没有 https:// 协议前缀

registry-mirrors

registry-mirrors 用于配置镜像加速器,以优化镜像拉取速度。

示例配置:

{
  "registry-mirrors": ["https://mirror.example.com"]
}

注意: 这里有 https:// 前缀协议

log 日志

log 日志配置用于配置容器的日志管理功能,比如配置日志的存储位置、格式、大小、数量等限制等。

log-driver 用于指定 Docker 容器的日志驱动。常见的日志驱动包括:

  • json-file: 默认日志驱动,将日志存储为 JSON 文件。
  • syslog: 将日志发送到 syslog 服务器。
  • journald: 将日志发送到 systemd 日志系统。

示例配置:

  "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" // 最大日志文件大小
  },

storage-driver

storage-driver 用于指定 Docker 使用的存储驱动。常见的存储驱动包括:

  • overlay2: 推荐用于现代 Linux 内核。
  • aufs: 适用于较旧的 Linux 内核。
  • devicemapper: 适用于某些特定的存储需求。

示例配置:

{
  "storage-driver": "overlay2"
}

dns

dns 用于指定 Docker 容器使用的 DNS 服务器。

示例配置:

{
  "dns": ["8.8.8.8", "8.8.4.4"]
}

验证配置

通过以下命令可以验证配置文件是否生效:

docker info
docker system info

常见错误排查

  • 语法错误: 确保 daemon.json 的 JSON 格式正确。
  • 权限问题: 确保配置文件具有正确的权限,通常为 644