docker 日志、存储

因为经常需要用到 docker,需要管理存储空间,所以做一下记录。

日志管理

在 Docker 中修改日志大小主要是通过配置 日志驱动 (logging driver) 的选项来实现的。
默认情况下,Docker 容器使用 json-file 日志驱动,它会将日志写入主机的 /var/lib/docker/containers/<container-id>/ 目录中的 JSON 文件。

下面是几种常用的修改日志大小的方式👇


🧩 方法一:在运行容器时设置日志大小限制

当你使用 docker run 启动容器时,可以使用 --log-opt 参数:

docker run -d \
  --name myapp \
  --log-driver=json-file \
  --log-opt max-size=100m \
  --log-opt max-file=3 \
  nginx

参数说明:

  • max-size=100m:单个日志文件的最大大小为 100MB。
  • max-file=3:最多保留 3 个轮转日志文件,超过会自动删除最旧的。

日志路径(默认):

/var/lib/docker/containers/<container-id>/<container-id>-json.log

⚙️ 方法二:修改 Docker 守护进程的默认日志配置(全局生效)

  1. 编辑 Docker 守护进程配置文件:

    sudo nano /etc/docker/daemon.json
  2. 添加或修改以下内容:

    {
     "log-driver": "json-file",
     "log-opts": {
       "max-size": "100m",
       "max-file": "3"
     }
    }
  3. 保存并重启 Docker:

    sudo systemctl restart docker

⚠️ 注意:修改全局配置后,只对新创建的容器生效,已运行的容器不会自动更新。


🧰 方法三:使用 Docker Compose 修改日志配置

如果你用 docker-compose.yml 管理容器,可以在 logging 部分设置:

services:
  web:
    image: nginx
    logging:
      driver: "json-file"
      options:
        max-size: "100m"
        max-file: "3"

然后重新部署:

docker compose up -d

🧹 额外:清理已有容器的过大日志

如果日志文件已经过大(例如几个 GB),可以手动清理:

# 清空某个容器日志
truncate -s 0 /var/lib/docker/containers/<container-id>/<container-id>-json.log

🚨 注意:不要直接删除日志文件,否则 Docker 可能出错。应使用 truncate 来清空内容。


🧩 修改现有容器日志配置的正确方法

Docker 把每个容器的配置保存在:

/var/lib/docker/containers/<container-id>/hostconfig.json

其中就包括日志驱动及其参数。


🧱 步骤一:停止容器

必须先停止容器,否则 Docker 会在容器运行时覆盖你的修改。

docker stop <container-name-or-id>

📝 步骤二:编辑配置文件

打开容器目录:

cd /var/lib/docker/containers/<container-id>/
sudo nano hostconfig.json

找到类似内容:

"LogConfig": {
    "Type": "json-file",
    "Config": {}
}

修改为(例如限制 100MB × 3 文件):

"LogConfig": {
    "Type": "json-file",
    "Config": {
        "max-size": "100m",
        "max-file": "3"
    }
}

⚠️ 注意:

  • JSON 格式必须完全正确(引号、逗号、括号等)。
  • 不要改动其它字段,否则容器可能无法启动。

🔁 步骤三:重启 Docker 服务

sudo systemctl restart docker

▶️ 步骤四:重新启动容器

docker start <container-name-or-id>

可以用以下命令验证是否生效:

docker inspect <container-name-or-id> | grep -A 5 LogConfig

输出示例:

"LogConfig": {
    "Type": "json-file",
    "Config": {
        "max-size": "100m",
        "max-file": "3"
    }
}

⚠️ 注意事项

  • 旧日志不会自动轮转:修改后从新日志开始才会应用新规则。
  • 升级或重启 Docker 不会丢失修改
  • Docker Compose 或 Swarm 管理的容器:下次 up 时会被覆盖。建议直接改 Compose 文件里的 logging 配置。

默认存储路径

Docker 的数据(包括镜像、容器、日志、卷等)确实可以修改存放路径。默认路径是:

/var/lib/docker

很多人希望把它改到更大的磁盘(比如 /data/docker),这是完全可行的。下面是最常用、最安全的几种方法 👇


🧩 方法一:修改 Docker 的数据根目录(推荐)

1️⃣ 编辑 Docker 配置文件

编辑 daemon.json

sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json

加入或修改如下内容:

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

⚠️ 注意:如果文件中已有其他配置(如日志配置),确保 JSON 格式正确,比如:

{
  "data-root": "/data/docker",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

2️⃣ 停止 Docker 服务

sudo systemctl stop docker

3️⃣ 移动现有数据(可选)

如果你希望保留原有容器、镜像等数据:

sudo rsync -aP /var/lib/docker/ /data/docker/

rsync -aP 会保留权限并显示进度。
如果不需要旧数据,可以直接跳过这步(Docker 会重新创建目录)。


4️⃣ 重启 Docker

sudo systemctl start docker

检查是否生效:

docker info | grep "Docker Root Dir"

输出示例:

 Docker Root Dir: /data/docker

🧱 方法二:修改 systemd 启动参数(适合临时测试)

如果你不想动配置文件,也可以在 Docker 的 systemd 启动项中加参数。

  1. 编辑服务文件:

    sudo systemctl edit docker
  2. 添加内容:

    [Service]
    ExecStart=
    ExecStart=/usr/bin/dockerd --data-root=/data/docker
  3. 重新加载并重启:

    sudo systemctl daemon-reexec
    sudo systemctl daemon-reload
    sudo systemctl restart docker

🧰 方法三:软链接(最简单但不太推荐)

你也可以直接创建软链接:

sudo systemctl stop docker
sudo mv /var/lib/docker /data/docker
sudo ln -s /data/docker /var/lib/docker
sudo systemctl start docker

✅ 优点:快、简单。
⚠️ 缺点:某些环境(特别是 SELinux 或容器安全策略)可能有问题。


文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇