R / Richie全部文章 ↑

Linux · 2 分钟阅读

10. 修改 Docker 守护进程配置

所有配置都建议放进 /etc/docker/daemon.json,别动 docker.service——daemon.json 会被覆盖重启保留,systemd 改的 flag 在升级时容易丢。

配置文件位置

文件 作用
/etc/docker/daemon.json 主配置(推荐)
/lib/systemd/system/docker.service systemd unit 文件
/etc/systemd/system/docker.service.d/*.conf 覆盖 unit(推荐)

常用配置

存储位置

{
  "data-root": "/data/docker"
}

默认 /var/lib/docker。生产建议挂独立盘或独立卷。

镜像加速

{
  "registry-mirrors": [
    "https://mirror.ccs.tencentyun.com",
    "https://hub-mirror.c.163.com"
  ]
}

私有仓库

{
  "insecure-registries": [
    "registry.example.com:5000"
  ]
}

日志限制

容器日志默认无限增长,必须限制:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "5"
  }
}

存储驱动

{
  "storage-driver": "overlay2"
}

RHEL 9+ / Ubuntu 22.04+ 默认就是 overlay2,老的 devicemapper 早该退出舞台。

桥接网络

{
  "bip": "172.30.0.1/16",
  "default-address-pools": [
    {"base": "172.30.0.0/16", "size": 24}
  ]
}

避免和公司内网冲突。

systemd 覆盖

要加 ExecStart 之外的 flag,建议用 drop-in:

mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/override.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd \
  --data-root /data/docker \
  --log-driver json-file
EOF

ExecStart= 那一行必须保留——systemd 单元里"清空"原值再重写。

重启

systemctl daemon-reload
systemctl restart docker
systemctl status docker

验证

docker info
docker info --format '{{.RegistryConfig.Mirrors}}'

一些经验

  • 改完先 docker info 验证,没改错再批量推
  • data-root 一旦改完要 mv /var/lib/docker/* /data/docker/,别忘
  • 升级 Docker 版本前先备份 /etc/docker/daemon.json
  • 多套环境用同一份镜像时,daemon.json 跟代码一起放进仓库

参考