Docker配置
概述
/etc/docker/daemon.json 是 Docker 守护进程(dockerd)的核心配置文件,用于自定义镜像加速、网络、存储、日志、安全等运行参数。默认文件可能不存在,需手动创建,修改后需重启 Docker 服务生效。
基本规则:
- 严格遵循 JSON 语法(键值对双引号、逗号分隔)
- 修改后执行
systemctl daemon-reload && systemctl restart docker - 验证配置:
docker info查看配置是否生效
镜像加速配置
解决拉取镜像慢的问题:
{
"registry-mirrors": [
"https://xxxx.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}| 参数 | 类型 | 说明 |
|---|---|---|
registry-mirrors |
数组 | 镜像仓库加速地址列表 |
网络配置
自定义 Docker 网络参数:
{
"bip": "172.31.0.1/16",
"default-address-pools": [
{
"base": "172.32.0.0/16",
"size": 24
}
],
"dns": ["223.5.5.5", "8.8.8.8"],
"dns-search": ["docker.internal"],
"ipv6": true,
"fixed-cidr-v6": "2001:db8::/64",
"port-range": "30000-32767"
}| 参数 | 类型 | 说明 |
|---|---|---|
bip |
字符串 | bridge 网络网关和子网 |
default-address-pools |
数组 | 自定义网络地址池(避免网段冲突) |
dns |
数组 | 容器默认 DNS 服务器 |
dns-search |
数组 | DNS 搜索域 |
ipv6 |
布尔 | 启用 IPv6 支持 |
fixed-cidr-v6 |
字符串 | IPv6 固定子网 |
port-range |
字符串 | 端口映射范围 |
存储配置
自定义存储驱动、数据目录和日志限制:
{
"data-root": "/data/docker",
"storage-driver": "overlay2",
"storage-opts": ["overlay2.size=100G"],
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}| 参数 | 类型 | 说明 |
|---|---|---|
data-root |
字符串 | Docker 数据存储根目录(默认 /var/lib/docker) |
storage-driver |
字符串 | 存储驱动(推荐 overlay2) |
storage-opts |
数组 | 存储驱动额外参数 |
max-concurrent-downloads |
整数 | 同时下载镜像最大线程数 |
max-concurrent-uploads |
整数 | 同时上传镜像最大线程数 |
log-driver |
字符串 | 容器日志驱动 |
log-opts |
对象 | 日志驱动参数 |
安全配置
限制权限、启用 TLS、信任私有仓库:
{
"insecure-registries": ["192.168.1.100:5000"],
"allow-nondistributable-artifacts": ["192.168.1.100:5000"],
"tls": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server-cert.pem",
"tlskey": "/etc/docker/server-key.pem",
"tlsverify": true,
"live-restore": true
}| 参数 | 类型 | 说明 |
|---|---|---|
insecure-registries |
数组 | 信任的非 HTTPS 镜像仓库 |
allow-nondistributable-artifacts |
数组 | 允许推送非分布式镜像 |
tls |
布尔 | 启用 TLS 认证 |
tlscacert |
字符串 | TLS 根证书路径 |
tlscert |
字符串 | TLS 客户端证书路径 |
tlskey |
字符串 | TLS 客户端密钥路径 |
tlsverify |
布尔 | 验证服务端证书 |
live-restore |
布尔 | Docker 重启时保持容器运行 |
资源限制配置
限制 Docker 占用的系统资源:
{
"default-shm-size": "2G",
"oom-score-adjust": -1000,
"max-pids": 10000,
"memory-limit": "16G",
"cpu-shares": 2048
}| 参数 | 类型 | 说明 |
|---|---|---|
default-shm-size |
字符串 | 容器默认共享内存大小 |
oom-score-adjust |
整数 | OOM 优先级(数值越低越不易被杀) |
max-pids |
整数 | 所有容器最大 PID 总数 |
memory-limit |
字符串 | Docker 整体内存限制 |
cpu-shares |
整数 | Docker 整体 CPU 权重 |
其他实用配置
{
"experimental": true,
"features": {
"buildkit": true
},
"labels": ["env=production", "owner=devops"],
"log-level": "warn"
}| 参数 | 类型 | 说明 |
|---|---|---|
experimental |
布尔 | 启用实验性特性 |
features |
对象 | 启用特定特性(如 Buildkit) |
labels |
数组 | 为守护进程添加标签 |
log-level |
字符串 | 日志级别(debug/info/warn/error/fatal) |
完整配置示例
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.m.ixdev.cn"
],
"data-root": "/data/docker",
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"dns": ["223.5.5.5", "8.8.8.8"],
"insecure-registries": ["192.168.1.100:5000"],
"live-restore": true,
"default-shm-size": "2G",
"max-concurrent-downloads": 10,
"experimental": true
}常见问题与注意事项
配置文件格式错误
# 验证 JSON 格式
jq . /etc/docker/daemon.json
# 查看 Docker 启动错误
systemctl status docker
journalctl -u docker -f配置不生效
- 确认配置文件路径正确:
/etc/docker/daemon.json - 重启 Docker 服务:
systemctl restart docker - 通过
docker info验证配置是否生效
镜像加速不生效
docker info | grep -A 5 "Registry Mirrors"修改数据目录后容器丢失
修改 data-root 后,原 /var/lib/docker 下的数据不会自动迁移,需手动迁移:
systemctl stop docker
rsync -avxP /var/lib/docker/ /data/docker/
systemctl start docker