设置容器的时间戳以应用于docker日志

问题描述 投票:0回答:2

我想查看带有时间戳的容器日志,但日志的时区未从

ENV

设置
version: '3.8'
services:
  api:
    build: .
    ports:
      - "3000:3000"
    environment:
      - TZ=Asia/Tehran

但是使用

docker-compose up -build
构建容器并运行下面的命令来查看容器的日志后,我发现
Asia/Tehran
的时间戳设置不正确:

docker-compose logs -ft api
docker docker-compose
2个回答
2
投票

我不相信这是可能的。当您运行

docker logs -t
docker-compose logs -t
时,日志中时间戳的输出来自 docker 客户端,该客户端正在从 docker 引擎转发日志。查看包含时间戳的代码

if config.Timestamps {
    logLine = append([]byte(msg.Timestamp.Format(jsonmessage.RFC3339NanoFixed)+" "), logLine...)
}

msg.Timestamp
字段不会通过
time.Local()
传递,因此无论运行docker引擎的主机的时区或调用docker API的客户端是什么时区,它都应始终被视为UTC。

容器的时区在这里不适用,除非您将时间戳添加到应用程序本身的日志中并跳过传递

-t
选项。


0
投票

您使用的基础图像很重要。这是一个开箱即用的快速示例:

docker run --init -d --rm -e TZ=Asia/Tehran centos bash -c 'while true; do echo "$(date) INFO log message."; sleep 1; done'
docker logs -f <container>  # you will see the log date time uses container's TZ instead of the host

您可以将 TZ 更改为不同的时区以查看不同的日志日期时间。如果您在日志命令中包含“-t”,您将看到主机日期/时间添加到日志消息中。

© www.soinside.com 2019 - 2024. All rights reserved.