docker守护进程配置通过/etc/docker/daemon.json完成,需严格遵循json格式,包含data-root、exec-opts、log-driver、storage-driver、insecure-registries、registry-mirrors等关键字段,并支持features、default-ulimits、hosts、dns等可选配置。

Docker 守护进程(dockerd)的配置主要通过 /etc/docker/daemon.json 文件完成。这个 JSON 格式文件用于设置全局行为,比如镜像仓库、日志驱动、网络、存储驱动、安全选项等。它比命令行参数更稳定、可维护,且重启 Docker 服务后仍生效。
注意:该文件必须是严格合法的 JSON(不能有注释、尾逗号、单引号),否则 dockerd 启动失败,systemctl status docker 会提示解析错误。
daemon.json 基础结构和常用配置项
典型最小可用配置如下:
{
"data-root": "/var/lib/docker",
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2",
"insecure-registries": ["192.168.10.20:5000"],
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
关键字段说明与建议:
-
data-root:指定容器、镜像、卷等数据的根目录,默认/var/lib/docker。若磁盘空间不足或需分离 I/O,可改到大容量挂载点(如/mnt/docker),改完需sudo systemctl stop docker && sudo rsync -avxP /var/lib/docker/ /mnt/docker/ && sudo systemctl start docker。 -
exec-opts:常用于统一 cgroup 驱动,尤其在 Kubernetes 环境中必须与 kubelet 一致(推荐systemd)。不匹配会导致 kubelet 报cgroup driver mismatch错误。 -
log-driver和log-opts:避免容器日志无限增长。json-file是默认驱动,max-size+max-file组合实现轮转;生产环境也可设为journald或syslog。 -
storage-driver:多数 Linux 发行版自动选overlay2(需内核 ≥4.0,ext4/xfs 文件系统)。不要随意切换,否则可能触发重建镜像层。 -
insecure-registries:仅用于 HTTP(非 HTTPS)私有仓库,开发测试可用,生产应配 TLS 证书并移除此项。 -
registry-mirrors:加速国内拉取官方镜像,推荐中科大、阿里云、网易等镜像站(选一个即可)。
配置后验证与重载
修改完 daemon.json 后:
- 运行
sudo docker info查看实际生效配置(如Registry Mirrors、Insecure Registries是否列出); - 执行
sudo systemctl daemon-reload && sudo systemctl restart docker重启服务; - 检查是否启动成功:
sudo systemctl is-active docker应返回active; - 若失败,用
sudo journalctl -u docker -n 50 --no-pager查看最近错误日志,常见问题是 JSON 格式错误或路径权限不对(如data-root目录不存在或属主不是root:root)。
其他可选但实用的配置项
根据场景按需添加:
-
启用实验特性(如
buildkit):
Docker Image Puller下载使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
"features": {"buildkit": true}启用后
docker build默认走 BuildKit(更快、支持.dockerignore更准、并发构建)。 -
限制容器资源默认值(防失控):
"default-ulimits": { "nofile": {"Name": "nofile", "Hard": 65536, "Soft": 65536}, "nproc": {"Name": "nproc", "Hard": 65536, "Soft": 65536} } -
绑定监听地址(谨慎!):
"hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
开放 TCP 端口存在严重安全风险,除非配合防火墙+TLS 认证,否则禁止在生产环境启用。
-
DNS 设置(解决容器内域名解析失败):
"dns": ["114.114.114.114", "8.8.8.8"], "dns-search": ["local"]
不复杂但容易忽略










