我在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
类似,因此,它应该只显示新的日志。因此,如果您正在观察日志的重复,那么您的程序看起来是在循环中执行的。
我脑海中唯一想到的是一个小技巧,尽管它不是一个优雅的解决方案,但它可以用于其他类似的情况:
- 根据
docker logs
在系统历史记录中定义时间格式
export HISTTIMEFORMAT="%Y-%m-%dT%H:%M:%S "
- 用一个简单的脚本获取最后一个docker日志命令日期
LAST_DOCKER_LOG=`history | grep " docker logs" | tac | head -1 | awk '{print $2}'`
- 在上次执行
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
时间戳显示选项可以帮助您解决这个问题