Docker 容器日志清理

redis服务不可用,可能是磁盘和cpu问题导致,端口和服务是正常的,但是访问不了

Docker 容器日志清理

1. 检查磁盘空间

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@izuf6iuxhvb38m9dsv93xlz ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 40G 34G 3.9G 100% /
devtmpfs devtmpfs 3.7G 0 3.7G 0% /dev
tmpfs tmpfs 3.7G 0 3.7G 0% /dev/shm
tmpfs tmpfs 3.7G 1.2M 3.7G 1% /run
tmpfs tmpfs 3.7G 0 3.7G 0% /sys/fs/cgroup
tmpfs tmpfs 756M 0 756M 0% /run/user/0
tmpfs tmpfs 756M 0 756M 0% /run/user/1000
overlay overlay 40G 34G 3.9G 100% /var/lib/docker/overlay2/a7b3d67b195022231b9e06caa0d7583f4d49cc61dca13d5f87b4a257208c32fd/merged
shm tmpfs 64M 0 64M 0% /var/lib/docker/containers/4b9781b30b644616fc0697bf4b17a770b6885c6dadfc371a2c4776ec8f9e355e/shm
overlay overlay 40G 34G 3.9G 90% /var/lib/docker/overlay2/2716c7de6afb682bf2f0db4ba6455293e135f0c9b0cce87480f26c60d51c9b52/merged
shm tmpfs 64M 0 64M 0% /var/lib/docker/containers/cd8985f4e433c132f4b933578a0d497ec44e205464a49232b29175ef5235c977/shm

从日志查看,磁盘占满100%,需要清理Docker容器日志

2. 清理未使用的镜像和容器

1
docker system prune -a

3. 清理Docker日志

3.1 检查当前的日志驱动

通过运行以下命令来查看 Docker 的配置,包括当前的日志驱动:

1
docker info | grep "Logging Driver"

执行后结果如下:

1
2
3
4
5
6
> [root@izuf6iuxhvb38m9dsv93xlz docker]# docker info | grep "Logging Driver"
> WARNING: You're not using the default seccomp profile
> Logging Driver: journald
> WARNING: bridge-nf-call-iptables is disabled
> WARNING: bridge-nf-call-ip6tables is disabled
>
  • Docker 当前使用的日志驱动是 journald。这意味着容器的日志并不是存储在传统的文件中,而是通过系统日志服务(systemd-journald)进行管理。
3.2 查看 Docker 日志

使用 journalctl 命令查看 Docker 的日志。以下命令会显示 Docker 服务的所有日志:

1
journalctl -u docker.service

清理 journald 日志

journald 会保留日志文件以供后续查看,如果这些日志占用了大量空间,通过以下步骤进行清理:

3.3 限制 journald 日志的大小

/etc/systemd/journald.conf 文件中设置日志大小限制。添加或修改以下行:

1
2
3
4
[Journal]
SystemMaxUse=100M
SystemKeepFree=100M
SystemMaxFileSize=10M

这些设置用于限制 journald 使用的总空间和单个日志文件的大小。

配置项详解

  1. SystemMaxUse=100M
    • 含义:设置 journald 可以使用的最大存储空间为 100 MB。这意味着在达到此限制时,journald 会开始删除旧日志,以确保新日志能够继续写入。
  2. SystemKeepFree=100M
    • 含义:确保系统始终保持至少 100 MB 的可用空间。journald 会根据需要删除旧的日志条目,以满足这个要求。
  3. SystemMaxFileSize=10M
    • 含义:设置单个日志文件的最大大小为 10 MB。当某个日志文件达到此大小时,journald 会轮换日志,即创建一个新的日志文件,并将旧日志文件归档。

重启 systemd-journald 服务

  1. 修改配置文件

在编辑 /etc/systemd/journald.conf 文件并进行所需的更改后,保存文件。

  1. 重启 systemd-journald 服务

使用以下命令重启 systemd-journald 服务:

1
systemctl restart systemd-journald
  1. 确认更改生效

使用以下命令检查 systemd-journald 的状态,确认服务是否已成功重启:

1
systemctl status systemd-journald
  1. 检查日志配置

如果需要验证新配置是否生效,查看日志并确认其行为。例如,使用以下命令查看当前日志的状态:

1
2
3
journalctl --disk-usage # 查看当前日志的状态
[root@izuf6iuxhvb38m9dsv93xlz docker]# journalctl --disk-usage
Archived and active journals take up 24.0M on disk. # 这表示系统中所有的 systemd 日志(包括活动日志和归档日志)总共占用了 24.0 MB 的磁盘空间。
3.4 清理旧的日志条目

使用以下命令手动清理旧的日志:

1
journalctl --vacuum-time=2d # 这将删除超过 2天的日志。可以根据需要调整时间。

使用 journald 作为日志驱动时,管理日志的方式与传统的文件系统有所不同。如果需要清理空间,通过调整 journald 的配置、查看 Docker 的日志。

4. 配置 Docker 使用 json-file 日志驱动(可选)

  1. 将 Docker 的日志驱动更改为 json-file,以便更方便地管理日志,在 /etc/docker/daemon.json 中添加或修改以下内容:
1
2
3
4
5
6
7
8
> {
> "log-driver": "json-file",
> "log-opts": {
> "max-size": "10m",
> "max-file": "3"
> }
> }
>
  1. 重启Docker容器
1
systemctl restart docker

切换到 json-file 日志驱动后,现有容器的日志设置不会自动更改,需要重新创建这些容器以应用新的日志配置。