По умолчанию docker использует json-file
драйвер ведения журнала. Этот драйвер сохраняет все от контейнеров stdout
и stderr
в /var/lib/docker/containers/<container-id>/<container-id>-json.log
на вашем docker хосте. Команда docker logs
только читает из этого файла. По умолчанию postgresql регистрируется в stderr #log_destination = 'stderr'
. Вы включили сборщик журналов, который перехватывает журналы, отправленные в stderr, и сохраняет их в файловой системе. По этой причине вы больше не видите их в выводе docker logs
. В документации postgresql я нигде не вижу, как отправлять логи как в файл, так и в stderr. Я не эксперт по psql.
https://www.postgresql.org/docs/9.5/runtime-config-logging.html
Контейнеры должны войти в stderr и stdout. Настройте продолжение Процесс входа в файл внутри файловой системы контейнера считается плохой практикой. Вы потеряете файловую систему, когда контейнер умрет, если не присоедините папку как том.
Если вы настаиваете, ваш единственный шанс - изменить строку конфигурации log_filename
на что-то stati c, как postgresql.log
, и создать символ * Ссылка 1034 * (и переписать файл postgresql.log
, созданный psql), указывающий на него как stderr ln -fs /dev/stderr /var/lib/postgresql/data/log/postgresql.log
.
Я не тестировал решение, и у меня есть определенные сомнения относительно сборщика журналов и его Возможности log_rotate. Я понятия не имею, что происходит с postgresql.log
, когда файл журнала вращается. Возможно, он скопирован и исходный файл удален / воссоздан postgres, и вы потеряете свою ссылку. Вы можете попробовать отключить log_truncate_on_rotation
boolean, чтобы преодолеть это, но я не уверен, поможет ли это tbh.