【发布时间】:2021-09-14 18:36:47
【问题描述】:
有什么方法可以查看已退出容器的日志吗?
我可以使用docker ps -a 获取已退出容器的容器 ID,但我想知道它运行时发生了什么。
【问题讨论】:
标签: docker
有什么方法可以查看已退出容器的日志吗?
我可以使用docker ps -a 获取已退出容器的容器 ID,但我想知道它运行时发生了什么。
【问题讨论】:
标签: docker
使用docker logs。它也适用于停止的容器,并捕获容器主进程的整个 STDOUT 和 STDERR 流:
$ docker run -d --name test debian echo "Hello World"
02a279c37d5533ecde76976d7f9d1ca986b5e3ec03fac31a38e3dbed5ea65def
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
49daa9d41a24 debian "echo test" 2 minutes ago Exited (0) 2 minutes ago test
$ docker logs -t test
2016-04-16T15:47:58.988748693Z Hello World
【讨论】:
stack=s1 && c=$(task_id=$(docker stack ps "$stack" --filter desired-state=shutdown | tail -n +2 | head -n 1 | awk '{print $1}') && docker inspect --format '{{.Status.ContainerStatus.ContainerID}}' "$task_id") && docker logs "$c" 在命令开头指定堆栈名称。
--rm 标志启动的容器,它将如何工作(如果可以)?这可能吗?
docker logs --tail=50 <container id> 用于最后五十行 - 当您的容器运行了很长时间时很有用。
【讨论】:
您甚至可以使用以下命令从已退出的容器中复制日志:
dockercpcontainer_name:path_of_file_in_container destination_path_locally
例如:
docker cp sample_container:/tmp/report /root/mylog
【讨论】:
要在less中直接查看退出容器的日志文件,滚动到文件末尾,我使用:
docker inspect $1 | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$/\1/p" | xargs sudo less +G
以 ./viewLogs.sh CONTAINERNAME 运行
与基于 docker logs 的方法相比,此方法的优势在于直接打开文件,而不是流式传输。
sudo 是必要的,因为 LogPath/File 通常是在 root 下拥有的
【讨论】:
@icyerasor 上面的评论实际上帮助我解决了这个问题。在我的特殊情况下,停止运行的容器没有容器名称,只有容器 id。
找到日志的步骤也列在此post
docker ps - a 找到停止的容器
cat /var/lib/docker/containers/<container id>/<container id>-json.log
【讨论】: