TFTP-hpa 未登录 docker 容器

R T*_*eed 3 ubuntu logging tftp docker

我在 ubuntu:16.04 基本映像上运行 tftpd-hpa。当我在完整发行版上运行它时,它记录正​​常,但在 docker 容器内没有任何日志。它似乎正在尝试登录到丢失的 /var/log/syslog 。有人对我如何从中获取一些日志有任何建议吗?

详细程度设置为 4,这在完整的 Ubuntu 16.04 安装上提供了合适的详细输出,但在容器中没有任何输出。

谢谢

lar*_*sks 6

tftpd不会自行写入日志文件。相反,它通过 syslog 进行记录(它/dev/log在那里打开并写入消息,这些消息由某种日志守护程序收集,然后根据其配置分派到文件)。

在典型的容器内没有日志守护进程,因此没有任何东西正在侦听/dev/log,并且您的日志消息会消失。

如果您想tftpd在容器内运行时查看这些日志,则需要监听一些东西/dev/log。您有多种选择:

  • 您可以通过添加到命令行来将主机安装/dev/log在容器内;这将使容器中的日志消息出现在主机的文件中(最终目的地取决于您的系统日志配置,但通常类似于)。-v /dev/log:/dev/logdocker runtftpd/var/log/.../var/log/messages

  • 您可以在容器中运行最小的系统日志服务并将其记录到文件中。例如,您可以在启动服务之前安装busybox并运行。例如,你的可能看起来像:busybox syslogdtftpdCMD

    CMD ["sh", "-c", "busybox syslogd; in.tftpd -Lvvv"]
    
    Run Code Online (Sandbox Code Playgroud)

    在这种情况下,日志将在容器/var/log/messages 内部可见。

  • 您可以将日志重定向到容器的标准输出,而不是将日志写入文件。如果您修改上面的命令以busybox syslogd写入标准输出,就像这样......

    CMD ["sh", "-c", "busybox syslogd -n -O /dev/stdout & in.tftpd -Lvvv"]
    
    Run Code Online (Sandbox Code Playgroud)

    ...然后您将在容器的控制台上看到日志,它们也将由 Docker 收集并通过docker logs.

这不是详尽的解决方案列表,但希望它足以为您指明解决方案。