Docker查看已退出容器的日志

时间:2016-04-16 15:43:42

标签: docker

有什么办法可以看到退出的容器的日志?

我可以使用docker ps -a获取已退出容器的容器ID,但我想知道它在运行时发生了什么。

5 个答案:

答案 0 :(得分:43)

使用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

答案 1 :(得分:12)

最后五十行

docker logs --tail=50 <container id> - 当你的容器已经运行了很长时间时很有用。

答案 2 :(得分:3)

您可以使用以下命令甚至从已退出的容器中复制日志:

  

docker cp container_name : path_of_file_in_container destination_path_locally

例如:

docker cp sravya:/tmp/report /root/mylog

答案 3 :(得分:2)

要在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拥有的

答案 4 :(得分:0)

@icyerasor 上面的评论实际上帮助我解决了这个问题。在我的特殊情况下,停止运行的容器没有容器名称,只有容器 ID。

找到日志的步骤也列在此 post

  1. 通过 docker ps - a 找到停止的容器
  2. 获取失败容器的容器ID
  3. 在此命令中替换它 cat /var/lib/docker/containers/<container id>/<container id>-json.log