Logrotate журналов контейнера докеров, если пользователь не существуют на хосте

Я смонтировал журналы своих контейнеров на хост (например, / 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, поэтому мне нужно выполнить ротацию журнала самостоятельно.)

0
задан 12 April 2020 в 15:19
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

Это могло привести к состоянию гонки.

Если у вас есть лучшее решение, опубликуйте его.

0
ответ дан 12 April 2020 в 15:45

Теги

Похожие вопросы