删除在 /var/lib/docker/containers/HASH 生成的 docker 日志是否安全
Is it safe to delete docker logs generated at /var/lib/docker/containers/HASH
日志现在是13GB,不知道删除日志是否安全,以及如何让日志变小
root@faith:/var/lib/docker/containers/f1ac17e833be2e5d1586d34c51324178bd18f969d
1046cbb59f10eaa4bcf84be# ls -alh
total 13G
drwx------ 2 root root 4.0K Mar 6 08:35 .
drwx------ 3 root root 4.0K Feb 24 11:00 ..
-rw-r--r-- 1 root root 2.1K Feb 24 10:15 config.json
-rw------- 1 root root 13G Feb 25 00:27 f1ac17e833be2e5d1586d34c51324178bd18f96
9d1046cbb59f10eaa4bcf84be-json.log
-rw-r--r-- 1 root root 611 Feb 24 10:15 hostconfig.json
-rw-r--r-- 1 root root 13 Feb 24 10:15 hostname
-rw-r--r-- 1 root root 175 Feb 24 10:15 hosts
-rw-r--r-- 1 root root 61 Feb 24 10:15 resolv.conf
-rw-r--r-- 1 root root 71 Feb 24 10:15 resolv.conf.hash
删除容器时应该清除这些。 (因此,不删除它们是可以的,因为Docker认为它控制了/var/lib/docker
。)
恭喜,您发现了 Docker 的一大未解难题!
正如 Nathaniel 所说,Docker 假设它对 /var/lib/docker
下的事物拥有完全所有权,因此试图从 Docker 的背后删除那里的文件可能行不通.
但是,根据 issue 7333 and in PR 9753 中的组件,人们似乎成功地使用 logrotate
和 copytruncate
指令来轮换 docker 日志。这两个链接都值得一读,因为它们包含关于 Docker 日志记录的陷阱和一些潜在解决方案的长篇讨论。
理想情况下,Docker 本身会对日志管理提供更好的本机支持。在此之前,这里有一些可供考虑的替代方案:
如果您控制应用程序的源代码,则可以将所有内容配置为记录到系统日志而不是 stdout/stderr。然后,您可以采用多种解决方案,从在容器内 运行 设置系统日志服务到在容器内公开主机的 /dev/log
。
另一种选择是 运行 systemd
在您的容器中,并使用它来启动您的服务。 systemd 将从您的服务中收集 stdout/stderr 并将其提供给 journald,而 journald 将负责诸如日志轮换之类的事情(并且还为您提供一个相当灵活的查询日志的机制)。
日志现在是13GB,不知道删除日志是否安全,以及如何让日志变小
root@faith:/var/lib/docker/containers/f1ac17e833be2e5d1586d34c51324178bd18f969d
1046cbb59f10eaa4bcf84be# ls -alh
total 13G
drwx------ 2 root root 4.0K Mar 6 08:35 .
drwx------ 3 root root 4.0K Feb 24 11:00 ..
-rw-r--r-- 1 root root 2.1K Feb 24 10:15 config.json
-rw------- 1 root root 13G Feb 25 00:27 f1ac17e833be2e5d1586d34c51324178bd18f96
9d1046cbb59f10eaa4bcf84be-json.log
-rw-r--r-- 1 root root 611 Feb 24 10:15 hostconfig.json
-rw-r--r-- 1 root root 13 Feb 24 10:15 hostname
-rw-r--r-- 1 root root 175 Feb 24 10:15 hosts
-rw-r--r-- 1 root root 61 Feb 24 10:15 resolv.conf
-rw-r--r-- 1 root root 71 Feb 24 10:15 resolv.conf.hash
删除容器时应该清除这些。 (因此,不删除它们是可以的,因为Docker认为它控制了/var/lib/docker
。)
恭喜,您发现了 Docker 的一大未解难题!
正如 Nathaniel 所说,Docker 假设它对 /var/lib/docker
下的事物拥有完全所有权,因此试图从 Docker 的背后删除那里的文件可能行不通.
但是,根据 issue 7333 and in PR 9753 中的组件,人们似乎成功地使用 logrotate
和 copytruncate
指令来轮换 docker 日志。这两个链接都值得一读,因为它们包含关于 Docker 日志记录的陷阱和一些潜在解决方案的长篇讨论。
理想情况下,Docker 本身会对日志管理提供更好的本机支持。在此之前,这里有一些可供考虑的替代方案:
如果您控制应用程序的源代码,则可以将所有内容配置为记录到系统日志而不是 stdout/stderr。然后,您可以采用多种解决方案,从在容器内 运行 设置系统日志服务到在容器内公开主机的 /dev/log
。
另一种选择是 运行 systemd
在您的容器中,并使用它来启动您的服务。 systemd 将从您的服务中收集 stdout/stderr 并将其提供给 journald,而 journald 将负责诸如日志轮换之类的事情(并且还为您提供一个相当灵活的查询日志的机制)。