Docker日志详解:剖析日志格式、级别和过滤选项 (docker logs)
前言
Docker 日志是深入了解容器内的应用程序及其运行方式的重要工具。通过分析日志,您可以识别问题、监控性能并获得对系统行为的整体理解。本文将深入探讨 Docker 日志,涵盖日志格式、日志级别和日志过滤选项的详细剖析。日志格式
Docker 日志以 JSON 格式输出,提供结构化的数据,易于解析和理解。以下是 JSON 日志部分的示例:
{"log": "Hello world!","stream": "stdout","time": "2022-03-29T14:35:00.123Z"}
log: 日志消息的内容。stream: 日志消息的输出流(例如 stdout 或 stderr)。time: 日志消息的时间戳(以 ISO 8601 格式)。
日志级别
Docker 日志支持以下日志级别:debug: 非常详细的日志消息,仅用于调试目的。info: 一般信息性日志消息,用于记录正常操作。warn: 警告消息,用于指示潜在的问题。error: 错误消息,用于报告无法处理的错误。fatal: 致命错误消息,用于报告导致应用程序终止的错误。可以通过`--log-level` 选项指定日志级别,如下所示:
docker run --log-level=info my-image
日志过滤选项
Docker 提供了多种日志过滤选项,允许您根据特定标准缩小日志范围。这些选项包括:--since: 根据时间戳过滤日志。--until: 根据时间戳过滤日志。--tail: 指定要显示的日志行数。--timestamps: 在日志行中包括时间戳。--follow: 持续显示日志消息,即使 Docker 容器已退出。以下是一些使用这些选项的示例:显示过去 1 小时的日志:
docker logs --since="1h" my-container
仅显示错误和致命错误:
docker logs --filter=level=error,fatal my-container
跟随容器日志,直到它退出:
docker logs --follow my-container
获取日志
可以使用 `docker logs` 命令获取 Docker 容器的日志。以下是命令的基本语法:
docker logs [OPTIONS] CONTAINER [CONTAINER...]
您可以指定多个容器以同时获取多个容器的日志。
Docker Compose 日志
对于使用 Docker Compose 编排服务的应用程序,您可以使用 `docker-compose logs` 命令获取服务的日志。以下是命令的基本语法:
docker-compose logs [OPTIONS] [SERVICE...]
您可以指定多个服务以同时获取多个服务的日志。
高级日志工具
除了 `docker logs` 命令之外,还有许多第三方工具可用于管理和分析 Docker 日志。这些工具包括:Fluentd: 一种流行的日志收集和转发工具,可将 Docker 日志发送到各种目的地。Logstash: 另一个日志收集和分析工具,提供广泛的过滤和转换选项。Kibana: 一个基于 Web 的日志可视化工具,可用于创建仪表板和报告。结论
Docker 日志在监控和调试容器化应用程序方面至关重要。通过了解 Docker 日志格式、日志级别和日志过滤选项,您可以有效地分析日志以获得对系统行为的深入理解。利用高级日志工具,您可以进一步增强日志管理和分析功能,以获得更好的可见性和控制。Docker:容器管理(启动参数,查看容器和日志,进入和修改容器)
摘要: Docker
容器是一个精简版的操作系统,一般一个容器只运行一个应用,容器通过镜像创建,使用docker run 命令创建,容器起到了 隔离 作用,容器和容器之间独享空间和网络等
容器的基本操作包括创建(启动),停止,重启,查看,检查等,容器通过镜像创建,使用 docker run 命令创建,需要指定run参数,镜像名,容器执行命令,语句格式如下
在实际使用中启动一个镜像,例如
-e 设置环境变量,格式是 -e k1=v1 -e k2=v2 ,使得在docker镜像中的程序能够直接访问到环境变量,同时可以作为配置参数放在docker run启动镜像的时候设置,而不是写死在dockerfile在build的过程中,-e和dockerfile中的 ENV 变量作用相同,当变量重名时-e替换ENV,下面测试一些-e参数,在Dockerfile指定环境变量
直接构建成容器
开启一个终端启动容器内部,打印指定的环境变量a
此时在run指令中增加-e设置环境变量,可见-e替换了Dockerfile中指定的环境变量
因为一个镜像可以启动多个容器,所以可以通过设置不同-e达到设置不同配置参数的目的,比如下一个例子在Dockerfile中设置和将环境变量写入yaml文件再供Python调用,执行的内容为打印yaml配置文件的参数内容,比如下面这个例子先看下目录结构
其中是一个空配置文件,在中先使用echo写入追加配置参数到在执行Python脚本
Dockerfile中启动脚本作为容器执行命令
在启动容器时,使用-e指定环境变量,在中echo将环境变量拿到和写入配置文件,测试多次以不同的配置参数启动容器如下
-v 设置挂载运行,将宿主机当前目录下的文件挂载到容器中/home目录下,例如
如果挂载的目录和Dockerfile中的COPY的目录不一致, -v会替代COPY或者ADD ,例如现在Docker中COPY一个文件到容器/home目录下
同目录下内容是打印1
构建镜像结束后,指定-v启动,起始挂载另外一个目录,目录下内容是打印2
docker run参数中最后的COMMAND会覆盖Dockerfile中指定的 CMD ,例如执行echo 2替换原始Dockerfile中的CMD echo 1,输出结果是2且执行完毕后退出
对于Dockerfile中的 ENTRYPOINT 指定的启动命令docker run的COMMAND不会覆盖,如果要覆盖Docker中的ENTRYPOINT需要指定docker run中的 --entrypoint 参数,格式是
测试一个Dockerfile输出1
在docker run中使用--entrypoint覆盖Dockerfile中的ENTRYPOINT
容器启动后通过 docker ps 或者 docker container ls 查看容器,可以增加额外参数比如 -a 显示所有容器,默认只显示运行的容器,可以增加 --no-trunc 参数使得显示结果不截断,例如
显示结果分别显示了容器的ID,镜像,执行命令,创建时间,状态,端口映射(宿主机->容器)和容器名称。对于已经运行的容器可以使用 docker stop 停止,如果在docker run时增加--rm参数则停止的容器保留不会自动删除,例如
除了docker stop命令还有一种停止容器的命令 docker kill ,相比于docker stop,docker kill是 强制立即停止 ,而docker stop是先给了容器10秒(默认)的时间,使得容器有一定的时间处理、保存程序执行现场, 优雅的退出程序 ,例如
在容器停止之后可以使用 docker start 再启动一个停止的容器,例如
除此之外可以使用 docker restart ,此时容器可以使停止的也可以是在运行中的,例如
查看容器详情使用 docker inspect ,比如
在以上截取的内容中展示了容器详情,包括容器id,创建时间,执行命令和参数,执行状态,容器pid,落脚点,环境变量,网络设置,端口映射等,也可以使用Go语言风格输出指定的详情,比如分别只看容器的pid和容器的执行命令
容器是一个操作系统,可以进入这个操作系统查看容器的运行情况,有多种方式进入容器,其中主要是使用 docker exec 进入容器,在一个运行中的容器中执行一个命令,使用 -it 并带有 /bin/bash 命令就可以进入容器,比如
除了/bin/bash也可以是其他命令挂载exec后面则可以直接对一个运行中的容器执行命令,比如查看容器的进入落脚点路径,容器中的内存情况
当容器以后台 -d 运行时,日志运行在容器内部,可以进入容器内部查看日志,也可以使用 docker logs 查看日志,以一个flask api接口的容器为例,日志写入文件,同时也会输出在flask的控制台
创建Dockerfile以及构建镜像,启动容器
启动一个脚本不断请求api接口
进入容器内部查看日志
另一种方式是直接使用 docker logs 命令,比如使用 -f 追踪输出,并且从最后的第1行开始输出
此时宿主机的logs目录下为空,容器中的logs目录下存在文件,如果使用 -v 将宿主机目录挂载到容器作为容器写入的目录,则容器中数据的变动会同步到本地,这样可以直接在本地查看日志,修改容器启动为 -v 挂载的形式
此时本地logs目录下开始产生日志,且这个日志和容器内的logs目录下一致
如果容器内的内容改变了,此时删除容器从镜像重新启动容器则改动的内容将不会存在,如果相对修改过的容器保留下来则可以从容器生成新的镜像,先测试以下容器内修改在删除的容器后将不再生效,在已有容器中使用pip安装Python包
此时退出容器,并且删除容器,最后从镜像重新生成容器
此时进入容器检查,并不存在pymongo包
如果要容器变化保存下来需要以这个新容器生成一个镜像,使用 docker commit ,语法如下
以新安装pymongo的容器为例,对新容器使用docker commmit
新生成的镜像叫做xiaogp/my_image_test:v2
从新镜像启动容器并进入容器查看存在新安装的pymongo
docker日志存储位置,设置docker容器日志大小
在Linux系统中docker启动后日志存储在 /var/lib/docker/containers/容器ID/ 目录中,启动一个容器后,容器ID目录中会生成如下文件: 每个容器的日志默认都会以 json-file 的格式存储于 /var/lib/docker/containers/<容器id>/<容器id>下,不过并不建议去这里直接读取内容,因为容器的日志则可以通过docker logs 命令来访问,而且可以像tail -f一样,使用docker logs -f来实时查看。 如果使用 Docker Compose,则可以通过docker-compose logs <服务名>来查看。 从上面可以知道docker容器日志存储在文件中,容器销毁后 /var/lib/docker/containers/<容器id>/ 目录会被自动删除,所以容器日志也被一并删除。 如果容器一直运行并且一直产生日志,容器日志会导致磁盘空间爆满,如何解决这个问题? 新建 /etc/docker/ ,若有就不用新建了。 添加log-dirver和log-opts参数,如下: 设置完成之后,需要删除容器,并重新启动容器,我们可以看到 /var/lib/docker/containers/<容器id>/ 文件的变化如下: 设置 log-opts 之前: 设置 log-opts 之后: 在k8s集群中docker容器日志 /var/lib/docker/containers/容器ID/ 目录的文件如下: 与docker容器目录相比少了一些文件:hostname、hosts、、 k8s通过 sandbox(pause容器,关于pause容器的介绍可以查阅资料) 关联了这些文件,通过查看 cat 可以发现如下配置: 使用命令 cat /var/lib/docker/containers/<容器id>/ 查看 的内容,发现有如下设置: 查看 /etc/docker/ 发现有如下配置: 下面列出了一个容器的日志文件达到设置值的情况: 参考文档:Docker 日志都在哪里?怎么收集? Docker容器日志查看与清理
如何查看docker日志 怎样查看docker日志
pre{overflow-x: auto} 如何查看docker日志,让我们一起了解一下? 通过docker logs命令可以查看容器的日志。 高效的监控和日志管理对保持生产系统持续稳定的运行以及排查问题至关重要。 在微服务架构中,由于容器的数量众多以及快速变化的特性使得记录日志和监控变得越来越重要。 docker查看日志的几个方式: 1、docker logs --tail=1000 容器名称 (查看容器前多少行的日志)(推荐) 2、docker 容器启动后,可以进入以下位置查看日志(/var/lib/docker/containers/容器ID/容器)(进入容器内部查看日志) 3、#查看compose所有容器的运行日志 docker-compose -f logs -f 4、#查看compose下某个容器的运行日志 docker-compose -f docker-compose-app. yml logs -f服务名> 5、# 也可以把compose的容器日志输出到日志文件里去,然后用tail -f随时查看 docker-compose -f docker-compose-app. yml logs -f >> &具体操作如下: docker attach [options] 容器会连接到正在运行的容器,然后将容器的标准输入、输出和错误流信息附在本地打印出来。 命令中options的取值有三种:--detach-keys,--no-stdin,--sig-proxy。 该命令只是进入容器终端,不会启动新的进程。 所以当你同时使用多个窗口进入该容器,所有的窗口都会同步显示。 如果一个窗口阻塞,那么其他窗口也就无法再进行操作。 使用ctrl+c可以直接断开连接,但是这样会导致容器退出,而且还stop了。 如果想在脱离容器终端时,容器依然运行。 就需要使用--sig-proxy这个参数。 例如:$dockerattach--sig-proxy=falsemytest 注意: 当使用docker attach连接到容器的标准输入输出时,docker使用大约1MB的内存缓冲区来最大化应用程序的吞吐量。 如果此缓冲区填满,那么输出或写入的速度将会受到影响。 因此查看应用日志,可以使用docker logs命令。
若对本页面资源感兴趣,请点击下方或右方图片,注册登录后
搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源
如有其他疑问,请咨询右下角【在线客服】,谢谢支持!
相关文章
- 图像抠图的新革命!免费软件打破技术壁垒 (图像抠图的应用)
- 图像处理必备:免费抠图神器实现完美抠图 (图像处理必备英文词汇)
- 让抠图变得轻而易举!免费软件让你成为图像编辑大师 (让抠图变得轻一点)
- 图像编辑的秘密武器:免费抠图神器释放你的创作力 (图像编辑的秘密有哪些)
- 抠图不再是难题!免费神器助你轻松提取图像主体 (抠图太难了)
- 免费抠图神器:一招解锁图像编辑的强大功能 (免费抠图神器不用登录)
- 自定义抠图解决方案:根据您的具体需求,定制专属抠图服务 (自定义抠图背景图片)
- 批量抠图服务:批量处理图像,大大提高抠图效率 (批量抠图服务系统)
- 自动抠图神器:告别手动抠图,体验高效便捷的抠图方式 (自动抠图神器免费版)
- 高级抠图技术:解锁图像编辑的可能性,创造无穷灵感 (高级抠图技术是什么)
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~