包含来自容器的日志的日志文件在哪里?
Where is a log file with logs from a container?
我 运行 几个使用 docker-compose
的容器。我可以使用命令 docker-compose logs
查看应用程序日志。但是我想访问原始日志文件以将其发送到某个地方?它位于哪里?我想每个容器(在容器内?)都有单独的日志,但我在哪里可以找到它?
您可以docker inspect
每个容器查看它们的日志在哪里:
docker inspect --format='{{.LogPath}}' $INSTANCE_ID
而且,如果您试图弄清楚日志在哪里管理它们的集体大小,或者调整日志本身的参数,您会发现以下相关内容。
修复为日志保留的 space 数量
本文摘自Request for the ability to clear log history (issue 1083)):
Docker 1.8 and docker-compose 1.4 there is already exists a method to limit log size using docker compose log driver and log-opt max-size:
mycontainer:
...
log_driver: "json-file"
log_opt:
# limit logs to 2MB (20 rotations of 100K each)
max-size: "100k"
max-file: "20"
In docker compose files of version '2' , the syntax changed a bit:
version: '2'
...
mycontainer:
...
logging:
#limit logs to 200MB (4rotations of 50M each)
driver: "json-file"
options:
max-size: "50m"
max-file: "4"
(请注意,在两种语法中,数字都表示为字符串,在引号中)
docker-compose logs
未终止可能存在问题
- issue 1866:如果容器已经停止,命令
logs
不会退出
可以在以下位置找到容器的日志:
/var/lib/docker/containers/<container id>/<container id>-json.log
(如果您使用默认日志格式 json)
为了直接在less中查看日志文件,我使用:
docker inspect | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$//p" | xargs sudo less
运行 作为 ./viewLogs.sh CONTAINERNAME
要查看每个容器的日志占用了多少 space,请使用:
docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl
(您可能需要在 ls
之前添加 sudo
)。
截至 2018 年 8 月 22 日,可以在以下位置找到日志:
/data/docker/containers/<container id>/<container id>-json.log
在 Windows 上,默认位置是:C:\ProgramData\Docker\containers\<container-id>-json.log
。
docker inspect <containername> | grep log
要查看每个容器的日志大小,您可以使用此 bash 命令:
for cont_id in $(docker ps -aq); do cont_name=$(docker ps | grep $cont_id | awk '{ print $NF }') && cont_size=$(docker inspect --format='{{.LogPath}}' $cont_id | xargs sudo ls -hl | awk '{ print }') && echo "$cont_name ($cont_id): $cont_size"; done
示例输出:
container_name (6eed984b29da): 13M
elegant_albattani (acd8f73aa31e): 2.3G
这是
的位置
Windows 10 + WSL 2 (Ubuntu 20.04), Docker version 20.10.2, build 2291f61
假设
DOCKER_ARTIFACTS == \wsl$\docker-desktop-data\version-pack-data\community\docker
可以在
中找到容器日志的位置
DOCKER_ARTIFACTS\containers\[Your_container_ID]\[Your_container_ID]-json.log
这是一个例子
我 运行 几个使用 docker-compose
的容器。我可以使用命令 docker-compose logs
查看应用程序日志。但是我想访问原始日志文件以将其发送到某个地方?它位于哪里?我想每个容器(在容器内?)都有单独的日志,但我在哪里可以找到它?
您可以docker inspect
每个容器查看它们的日志在哪里:
docker inspect --format='{{.LogPath}}' $INSTANCE_ID
而且,如果您试图弄清楚日志在哪里管理它们的集体大小,或者调整日志本身的参数,您会发现以下相关内容。
修复为日志保留的 space 数量
本文摘自Request for the ability to clear log history (issue 1083)):
Docker 1.8 and docker-compose 1.4 there is already exists a method to limit log size using docker compose log driver and log-opt max-size:
mycontainer:
...
log_driver: "json-file"
log_opt:
# limit logs to 2MB (20 rotations of 100K each)
max-size: "100k"
max-file: "20"
In docker compose files of version '2' , the syntax changed a bit:
version: '2'
...
mycontainer:
...
logging:
#limit logs to 200MB (4rotations of 50M each)
driver: "json-file"
options:
max-size: "50m"
max-file: "4"
(请注意,在两种语法中,数字都表示为字符串,在引号中)
docker-compose logs
未终止可能存在问题
- issue 1866:如果容器已经停止,命令
logs
不会退出
可以在以下位置找到容器的日志:
/var/lib/docker/containers/<container id>/<container id>-json.log
(如果您使用默认日志格式 json)
为了直接在less中查看日志文件,我使用:
docker inspect | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$//p" | xargs sudo less
运行 作为 ./viewLogs.sh CONTAINERNAME
要查看每个容器的日志占用了多少 space,请使用:
docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl
(您可能需要在 ls
之前添加 sudo
)。
截至 2018 年 8 月 22 日,可以在以下位置找到日志:
/data/docker/containers/<container id>/<container id>-json.log
在 Windows 上,默认位置是:C:\ProgramData\Docker\containers\<container-id>-json.log
。
docker inspect <containername> | grep log
要查看每个容器的日志大小,您可以使用此 bash 命令:
for cont_id in $(docker ps -aq); do cont_name=$(docker ps | grep $cont_id | awk '{ print $NF }') && cont_size=$(docker inspect --format='{{.LogPath}}' $cont_id | xargs sudo ls -hl | awk '{ print }') && echo "$cont_name ($cont_id): $cont_size"; done
示例输出:
container_name (6eed984b29da): 13M
elegant_albattani (acd8f73aa31e): 2.3G
这是
的位置Windows 10 + WSL 2 (Ubuntu 20.04), Docker version 20.10.2, build 2291f61
假设
DOCKER_ARTIFACTS == \wsl$\docker-desktop-data\version-pack-data\community\docker
可以在
中找到容器日志的位置DOCKER_ARTIFACTS\containers\[Your_container_ID]\[Your_container_ID]-json.log
这是一个例子