我在ubuntu:16.04基本映像上运行tftpd-hpa。 当我在一个完整的发行版上运行它时,它logging正常,但是在docker容器内没有任何日志。 它似乎试图login到/ var / log / syslog这是缺less。 有没有人有任何build议,我怎么可以从这个日志?
详细程度设置为4,在完整的Ubuntu 16.04安装中给出了合适的详细输出,但容器中没有任何内容。
谢谢
tftpd不会自行写入日志文件。 相反,它通过系统日志(它打开/dev/log并在那里写入messsages,通过某种日志守护进程收集,然后根据其configuration分派到文件)进行日志logging。
在一个典型的容器里面没有日志守护进程,所以在/dev/log上没有任何东西在监听,你的日志信息就消失了。
如果你想在一个容器中运行tftpd时看到这些日志,你将需要在/dev/log上监听一些东西。 你有几个select:
您可以通过将-v /dev/log:/dev/log到您的docker run命令行来将主机的/dev/log挂载到容器中。 这将使容器中tftpd日志消息出现在主机的/var/log/...文件中(最终目标取决于您的系统日志configuration,但通常是/var/log/messages )。
您可以在容器中运行最小的syslog服务,并将其logging到文件中。 例如,您可以安装busybox ,然后在启动tftpd服务之前运行busybox syslogd 。 例如,您的CMD可能如下所示:
CMD ["sh", "-c", "busybox syslogd; in.tftpd -Lvvv"]
在这种情况下,日志将在容器内的/var/log/messages可见。
可以将日志redirect到容器的stdout,而不是将日志写入文件。 如果你修改上面的命令有busybox syslogd写入标准输出,像这样…
CMD ["sh", "-c", "busybox syslogd -n -O /dev/stdout & in.tftpd -Lvvv"]
…然后你会看到你的容器的控制台上的日志,他们也将被Docker收集并通过docker logs 。
这不是一个详尽的解决scheme列表,但希望这足以指出您的解决scheme。