docker-compose logs 命令如何实现只读取新增量的日志?
我本来运行 docker-compose
来观察日志是通过?下面的方式来实现的
nohup docker-compose up > run.log &
然后在终端中使用 tail -f
持续观察日志的输出:
tail -f run.log
虽然上面的命令工作良好,但是这样的方式不够优雅,通过阅读 docker-compose 文档,我发现下面的内容:
docker-compose logs
(ideaboom) ╭─bot@amd-5700G ~/Desktop/ideaboom/test_docker ‹master*› ╰─➤ docker-compose logs --help
View output from containers.
Usage: logs [options] [--] [SERVICE...]
Options:
--no-color Produce monochrome output.
-f, --follow Follow log output.
-t, --timestamps Show timestamps.
--tail="all" Number of lines to show from the end of the logs
for each container.
看起来和 Linux 的 tail
很像,所以我把我的 docker-compose.yml
配置为了下面的样子:
version: "3"services:
docker_log_service:
container_name: docker_log_service
image: testing/docker_log
network_mode: "host"
env_file:
- .env
logging:
driver: json-file
options:
max-size: "200k"
max-file: "10"
command: python main.py
下面是 Dockerfile
FROM python:3.9.9-slimENV PYTHONUNBUFFERED 1
RUN mkdir /code
WORKDIR /code
COPY main.py /code/
RUN pip install loguru pydantic -i https://mirrors.aliyun.com/pypi/simple
下面是 python 的 main.py
文件内容
import timefrom loguru import logger
while True:
logger.debug(f'{time.time()}')
logger.debug(f'中文测试')
time.sleep(1)
构建镜像的命令:
sudo docker build -t "testing/docker_log" .
再用下面的命令运行容器服务:
docker-compose up -d
再用下面的命令查看容器服务的日志输出:
docker-compose logs -f
输出如下
(ideaboom) ╭─bot@amd-5700G ~/Desktop/ideaboom/test_docker ‹master*›╰─➤ docker-compose logs -f 130 ↵
Attaching to docker_log_service
docker_log_service | 2021-12-19 06:30:28.503 | DEBUG | __main__:<module>:31 - 1639895428.503394
docker_log_service | 2021-12-19 06:30:28.503 | DEBUG | __main__:<module>:32 - 中文测试
docker_log_service | 2021-12-19 06:30:29.505 | DEBUG | __main__:<module>:31 - 1639895429.5050511
docker_log_service | 2021-12-19 06:30:29.505 | DEBUG | __main__:<module>:32 - 中文测试
docker_log_service | 2021-12-19 06:30:30.507 | DEBUG | __main__:<module>:31 - 1639895430.5074062
docker_log_service | 2021-12-19 06:30:30.507 | DEBUG | __main__:<module>:32 - 中文测试
docker_log_service | 2021-12-19 06:30:31.509 | DEBUG | __main__:<module>:31 - 1639895431.5091336
docker_log_service | 2021-12-19 06:30:31.509 | DEBUG | __main__:<module>:32 - 中文测试
docker_log_service | 2021-12-19 06:30:32.510 | DEBUG | __main__:<module>:31 - 1639895432.510944
docker_log_service | 2021-12-19 06:30:32.511 | DEBUG | __main__:<module>:32 - 中文测试
docker_log_service | 2021-12-19 06:30:33.512 | DEBUG | __main__:<module>:31 - 1639895433.5128994
docker_log_service | 2021-12-19 06:30:33.513 | DEBUG | __main__:<module>:32 - 中文测试
docker_log_service | 2021-12-19 06:30:34.514 | DEBUG | __main__:<module>:31 - 1639895434.5148842
docker_log_service | 2021-12-19 06:30:34.515 | DEBUG | __main__:<module>:32 - 中文测试
docker_log_service | 2021-12-19 06:30:35.516 | DEBUG | __main__:<module>:31 - 1639895435.5168786
docker_log_service | 2021-12-19 06:30:35.517 | DEBUG | __main__:<module>:32 - 中文测试
docker_log_service | 2021-12-19 06:30:36.518 | DEBUG | __main__:<module>:31 - 1639895436.5186315
docker_log_service | 2021-12-19 06:30:36.519 | DEBUG | __main__:<module>:32 - 中文测试
docker_log_service | 2021-12-19 06:30:37.520 | DEBUG | __main__:<module>:31 - 1639895437.5202699
一切看起来都正常,但是,当我再次运行 docker-compose logs -f
命令的时候,居然发现又被一切所有的旧日志都打印出来了,而不是只包含 "运行 docker-compose logs
命令" 之后的新日志!!!
我希望运行 docker-compose logs -f
命令只打印新的日志,而不是把老的日志都打印出来!!!
如果这个日志文件已经有 1TB
,那不知道有等候到何年马月了!!!
使用 Linux 的tail -f
命令会打印一点旧日志,当也就几行,无伤大雅,但是这个docker-compose logs -f
居然是打印一切,真是不可思议!!!!
所以如何做到:运行 docker-compose logs -f
命令只打印新的日志
或者有什么其他的命令可以实现这一点?
回答:
加上 tail 参数,从后面开始打印 docker-compose logs --tail=200 -f
回答:
除了用 tail 参数,还可以用 since
指定一个开始时间。
以上是 docker-compose logs 命令如何实现只读取新增量的日志? 的全部内容, 来源链接: utcz.com/p/938192.html