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 服务才能生效。
注意:
- 不同 Docker 版本中配置文件的变化可能会影响配置的兼容性。在升级 Docker 时,建议检查
daemon.json的配置项是否与新版本兼容。 - 从旧版本迁移到新版本时,可能需要调整配置文件。例如,某些配置项可能已被弃用或替换。
{
"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。