为什么执行dockerlog-f它从头开始返回数据



我在Dotnet核心控制台中有一个简单的代码,它只是永远计数:

class Program
{
static void Main(string[] args)
{
int counter = 1;
while (true)
{
counter++;
Console.WriteLine(counter);
}
}
}

我用docker包含了它,并通过VS docker运行它。

但是每次我执行>docker-logs-f dockerID它启动并显示从头开始计数!(1,2,3,….(。我希望每当我运行这个命令时,它都会显示它计数的最后一个整数的日志!

是";docker日志-f〃;导致每次都运行我的应用程序的新实例?

运行docker help logs时,您会看到以下内容:

--tail string    Number of lines to show from the end of the logs
(default "all")

所以你应该这样做:

docker logs --tail 100 -f dockerID

附加参考:docker日志文档>选项

docker logs -f的工作原理应该与tail -f类似,因此,它应该只显示新的日志。因此,如果您正在观察日志的重复,那么您的程序看起来是在循环中执行的。

我脑海中唯一想到的是一个小技巧,尽管它不是一个优雅的解决方案,但它可以用于其他类似的情况:

  1. 根据docker logs在系统历史记录中定义时间格式
export HISTTIMEFORMAT="%Y-%m-%dT%H:%M:%S "
  1. 用一个简单的脚本获取最后一个docker日志命令日期
LAST_DOCKER_LOG=`history | grep " docker logs" | tac | head -1 | awk '{print $2}'`
  1. 在上次执行docker logs之后获取日志:
docker logs --since $LAST_DOCKER_LOG <your_docker>

一行:

docker logs -t --since `history | grep " docker logs" | tac | head -1 | awk '{print $2}'` <your_docker>

注意:历史时间和docker日志时间必须在同一时区。

尽管如此,我还是要看看你的循环执行。也许,docker log -t时间戳显示选项可以帮助您解决这个问题

最新更新