Ubuntu 查看 Docker 容器运行日志存储空间占用

// 先提升权限, 才能进行下一步
sudo su
// 查找日志文件, 并且倒序
find /var/lib/docker/containers  -name "*.log" | xargs du -h | sort -hr

结果如下

24G	/var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log
12G	/var/lib/docker/containers/776e2068a08b8da92b410ee433d0758ae4484ae29183d3063f187b8ca7f00090/776e2068a08b8da92b410ee433d0758ae4484ae29183d3063f187b8ca7f00090-json.log
6.2G	/var/lib/docker/containers/d4f7ef527d345fec8f180adb2937b81a7965767ee38c88d89f7884e53dc5c139/d4f7ef527d345fec8f180adb2937b81a7965767ee38c88d89f7884e53dc5c139-json.log
6.2G	/var/lib/docker/containers/8fec9ee7a0f1934c2e70fbafa8fddbc8baa471bdde77991b72b588f09b523fa3/8fec9ee7a0f1934c2e70fbafa8fddbc8baa471bdde77991b72b588f09b523fa3-json.log

要找出哪个容器与特定的日志文件相关联:

可以使用容器的 ID 来识别它。找到日志文件的路径,其中包含了容器的 ID。以下是如何通过容器 ID 找到对应容器的详细信息的步骤:

  1. 获取容器 ID
    在日志文件路径中找到容器 ID,例如 1a3ef14d342c
  2. 查看容器详细信息
    使用 docker ps -a 命令列出所有容器,包括正在运行和已停止的容器。然后,你可以通过容器 ID 来查找对应的容器名称和其他信息。
   docker ps -a --filter "id=1a3ef14d342c"

这将显示与该 ID 匹配的容器的信息,包括容器名称、状态、创建时间等。

  1. 查看容器详细信息(可选)
    如果需要更多详细信息,可以使用 docker inspect 命令:
   docker inspect 1a3ef14d342c

这将返回一个 JSON 格式的详细信息列表,其中包括容器的配置、网络设置、挂载卷等信息。

如果想清空某个特定的日志文件,可以使用以下方法之一:

假设要清空的日志文件路径是 /var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log

方法一:使用 truncate 命令

truncate -s 0 /var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log

方法二:使用 echo 重定向

echo "" > /var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log

方法三:使用 : > 操作符

: > /var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log

这三种方法都会将指定的日志文件清空,而不会删除文件本身。

如何防止 Docker 容器的日志文件过大

要防止 Docker 容器的日志文件过大,可以通过配置 Docker 的日志轮替(log rotation)功能来限制日志文件的大小和数量。这可以通过修改 Docker 的配置文件 daemon.json 来实现。以下是具体的步骤:

配置日志轮替

  1. 编辑 Docker 配置文件 Docker 的配置文件通常位于 /etc/docker/daemon.json。如果该文件不存在,可以创建一个新的。 使用文本编辑器打开或创建文件:
   sudo nano /etc/docker/daemon.json
  1. 添加或修改日志配置daemon.json 文件中,添加以下配置以启用日志轮替:
   {
     "log-driver": "json-file",
     "log-opts": {
       "max-size": "10m",   // 每个日志文件的最大尺寸,例如 10MB
       "max-file": "3"      // 保留的最大日志文件数量
     }
   }

这段配置的意思是每个日志文件最大为 10MB,每个容器最多保留 3 个日志文件。

  1. 重新启动 Docker 服务 修改配置文件后,需要重新启动 Docker 服务以应用更改:
   sudo systemctl restart docker

验证配置

可以通过以下命令来验证 Docker 的日志配置是否生效:

docker info --format '{{.LoggingDriver}}'

这将显示当前使用的日志驱动程序。

注意事项

  • 日志驱动json-file 是 Docker 的默认日志驱动程序。如果使用其他日志驱动程序(如 syslogjournald 等),相应的配置可能会有所不同。
  • 影响:启用日志轮替后,旧日志会自动删除,因此可能会丢失旧日志信息。确保日志配置符合数据保留策略。
  • 其他日志驱动:如果环境中需要更复杂的日志管理方案,可以考虑使用其他日志驱动程序或外部日志管理工具来收集和分析日志。

如果只想限制某个特定容器的日志大小,而不是全局设置,可以在启动容器时通过命令行选项来指定日志配置。以下是如何为单个容器设置日志大小限制的步骤:

假设要启动一个名为 my-container 的容器,并希望限制其日志文件大小为 10MB,最多保留 3 个日志文件:

docker run -d \
  --name my-container \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  your-image-name

在这个命令中:

  • --log-driver json-file:指定使用 json-file 日志驱动。
  • --log-opt max-size=10m:设置单个日志文件的最大大小为 10MB。
  • --log-opt max-file=3:设置最多保留 3 个日志文件。

这样,只有 my-container 这个容器会受到这些日志限制的影响,而其他容器将继续使用默认的日志配置。

如果已经有一个正在运行的容器,并希望更改其日志配置,你需要先停止并删除该容器,然后使用上述命令重新启动它。请注意,删除容器会导致其数据丢失,除非使用了数据卷来持久化数据。