![当主机上不存在用户时,Logrotate Docker 容器的日志](https://linux22.com/image/750853/%E5%BD%93%E4%B8%BB%E6%9C%BA%E4%B8%8A%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%94%A8%E6%88%B7%E6%97%B6%EF%BC%8CLogrotate%20Docker%20%E5%AE%B9%E5%99%A8%E7%9A%84%E6%97%A5%E5%BF%97.png)
我将容器的日志挂载到主机(例如/var/log/container1
等)。现在我想使用主机的logrotate
。
但假设我需要这样做:
create 660 mysql mysql
mysql
主机上没有用户/组,因此 logrotate 失败:
未知用户‘mysql’
所以我尝试了:
create 660 999 999 # 999 is mysql user's uid/gid within container
但后来我得到:
未知用户‘999’
所以我尝试了:
create 660 999 999
su 999 999
但这会产生同样的错误。
我怎样才能做到这一点,没有在主机上创建虚拟用户?
(顺便说一句,在您告诉我依赖 docker 自己的日志轮换之前......这只是一个例子。我使用各种不记录到 stdout/stderr 的容器,所以我需要自己进行日志轮换。)
答案1
我认为问题在于logrotate
无法识别不存在的 uid/gid,即使文件系统可以识别。
解决方法:
#create 660 mysql mysql # break it: will use default of root:root
postrotate
chown 999:999 /var/log/container1/ # fix it
endscript
但这可能会导致竞争状况。
如果您有更好的解决方案,请发布。