Docker 查看退出容器的日志

有没有什么办法可以让我看到一个已经退出的集装箱的日志?

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

147120 次浏览

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

对于最后的50行,使用 docker logs --tail=50 <container id>-当容器运行了很长时间时非常有用。

为了直接查看一个退出容器的日志文件,滚动到文件末尾,我使用:

docker inspect $1 | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$/\1/p" | xargs sudo less +G

运行为./viewLogs.sh CONTAINERNAME

与基于 docker logs的方法相比,这种方法有一个优点,即文件是直接打开的,而不是流式打开的。

Sudo 是必需的,因为 LogPath/File 通常位于 root 所有者之下

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

docker cp Container _ name:Path _ of _ file _ in _ Container 目的地 _ 路径 _ 本地

例如:

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

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

发现此 邮寄中也列出的日志的步骤

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