Linux

當主機上不存在使用者時,記錄 docker 容器的日誌

  • April 12, 2020

我將容器的日誌掛載到主機(例如/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 的容器,所以我需要自己進行日誌輪換。)

我認為問題在於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

不過,這可能會導致競爭狀況。

如果您有更好的解決方案,請發布。

引用自:https://serverfault.com/questions/1011981