龙空技术网

「docker、tftp」优化CMD,使用docker logs查看tftp容器日志

DevOps砖工 111

前言:

现在小伙伴们对“实时查看docker容器日志”大致比较关切,兄弟们都想要知道一些“实时查看docker容器日志”的相关内容。那么小编同时在网络上网罗了一些对于“实时查看docker容器日志””的相关知识,希望你们能喜欢,看官们一起来了解一下吧!

tftp容器运行无日志

使用alpine容器安装tftp-hpa软件,这儿的Dockerfile内容为

FROM alpine# 设置时区RUN apk update && apk add ca-certificates && \    apk add tzdata && \    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \    echo "Asia/Shanghai" > /etc/timezoneRUN apk add --no-cache tftp-hpaVOLUME /var/tftpbootCOPY ./tftpboot/* /var/tftpboot/RUN chmod 755 /var/tftpboot/*EXPOSE 69/udp# ENTRYPOINT ["in.tftpd"]# CMD ["-L", "--secure", "/var/tftpboot"]

通过sudo docker run -d --name tftp --net host -p 0.0.0.0:69:69/udp -v /data/tftp/tftpboot/menu.ipxe:/var/tftpboot/menu.ipxe --restart=always alpine/tftp:v1.0-20211012启动容器,但使用docker logs -f tftp无任何日志显示。

解决方案

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

在一个典型的容器中,没有日志守护进程,因此没有任何东西在/dev/log上监听,日志消息就会消失。

如果想在容器中运行tftpd时看到这些日志,需要在/dev/log上有一些监听功能。有几个选择:

【日志映射到主机】通过向docker run命令行添加-v /dev/log:/dev/log,可以在容器中装载主机的/dev/log;这将使容器中来自 tftpd 的日志消息出现在主机的/var/log/...文件(最终目的地取决于系统日志配置,但通常类似于/var/log/messages)。【日志保存到容器中】可以在容器中运行一个最小的syslog服务,并将其记录到一个文件中。例如,可以安装busybox,然后在启动tftpd服务之前运行busybox syslogd。例如,CMD内容为:CMD ["sh", "-c", "busybox syslogd; in.tftpd -Lvvv"],在这种情况下,日志将在容器内的/var/log/messages中可见。【日志重定向到容器】可以将日志重定向到容器的标准输出,而不是将日志写入文件。如果修改上述命令,让busybox syslogd写入stdout,CMD内容为CMD ["sh", "-c", "busybox syslogd -n -O /dev/stdout & in.tftpd -Lvvv"],然后,您将在容器的控制台上看到日志,Docker也将在那里收集日志,并通过Docker日志提供这些日志。

所以这个tftp容器可以将Dockerfile修改如下:

# ENTRYPOINT ["in.tftpd"]# CMD ["-L", "--secure", "/var/tftpboot"]# 以上容器启动时不显示日志,通过以下命令增加日志功能。CMD ["sh", "-c", "busybox syslogd -n -O /dev/stdout & in.tftpd -Lvvv --secure /var/tftpboot"]

容器启动后,可以查看日志输出

Mar  5 22:21:42 debian10-pxectrlhost syslog.info syslogd started: BusyBox v1.34.1# 获取文件Mar  5 14:22:04 debian10-pxectrlhost daemon.notice in.tftpd[8]: RRQ from 192.168.168.200 filename ipxe.efi

标签: #实时查看docker容器日志