Назад | Перейти на главную страницу

TFTP-hpa не входит в докер-контейнер

Я запускаю tftpd-hpa на базовом образе ubuntu: 16.04. Когда я запускаю это в полном дистрибутиве, он отлично регистрируется, но внутри контейнера докеров нет никаких журналов. Кажется, что пытается войти в / var / log / syslog, который отсутствует. Есть ли у кого-нибудь предложения о том, как я могу получить от этого журналы?

Уровень детализации установлен на 4, что дает подходящий подробный вывод при полной установке Ubuntu 16.04, но ничего в контейнере.

Спасибо

tftpd не записывает в файлы журнала самостоятельно. Скорее, он регистрируется через системный журнал (открывает /dev/log и записывает туда сообщения, которые собираются каким-то демоном ведения журнала и затем отправляются в файлы в зависимости от его конфигурации).

Внутри типичного контейнера нет демона регистрации, поэтому ничего не слушает /dev/log и ваши сообщения журнала просто исчезнут.

Если вы хотите видеть эти журналы при запуске tftpd внутри контейнера вам нужно будет что-то слушать /dev/log. У вас есть несколько вариантов:

  • Вы можете установить свой хост /dev/log внутри контейнера, добавив -v /dev/log:/dev/log на ваш docker run командная строка; это сделает сообщения журнала из tftpd в контейнере появляются в вашем хосте /var/log/... файлы (конечный пункт назначения зависит от конфигурации системного журнала, но обычно что-то вроде /var/log/messages).

  • Вы можете запустить минимальную службу системного журнала в контейнере, и она будет записываться в файл. Например, вы можете установить busybox а затем запустить busybox syslogd прежде чем вы начнете tftpd служба. Например, ваш CMD может выглядеть так:

    CMD ["sh", "-c", "busybox syslogd; in.tftpd -Lvvv"]
    

    В этом случае журналы будут видны в /var/log/messages внутри контейнер.

  • Вместо записи журналов в файл вы можете перенаправить их на стандартный вывод контейнера. Если вы измените указанную выше команду, чтобы busybox syslogd напишите в stdout, вот так ...

    CMD ["sh", "-c", "busybox syslogd -n -O /dev/stdout & in.tftpd -Lvvv"]
    

    ... тогда вы увидите журналы на консоли вашего контейнера, где они также будут собираться Docker и доступны через docker logs.

Это не исчерпывающий список решений, но, надеюсь, его достаточно, чтобы указать вам на решение.