我想查看带有时间戳的容器日志,但日志的时区未从
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 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
选项。
您使用的基础图像很重要。这是一个开箱即用的快速示例:
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”,您将看到主机日期/时间添加到日志消息中。