当主机上不存在用户时,Logrotate Docker 容器的日志

当主机上不存在用户时,Logrotate Docker 容器的日志

我将容器的日志挂载到主机(例如/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

但这可能会导致竞争状况。

如果您有更好的解决方案,请发布。

相关内容