Docker查看已退出容器的日志

Kno*_*uch 58 docker

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

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

hel*_*ert 62

使用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
Run Code Online (Sandbox Code Playgroud)

  • 对于每隔几秒钟重新启动的Docker堆栈:`stack = s1 && c = $(task_id = $(docker stack ps“ $ stack” --filter required-state = shutdown | tail -n +2 | head -n 1 | awk'{print $ 1}')&& docker inspect --format'{{.Status.ContainerStatus.ContainerID}}'“ $ task_id”)&& docker logs“ $ c”`在命令开头指定堆栈名称。 (3认同)
  • 对于使用“--rm”标志启动的容器,它会如何工作(如果可以的话)?那可能吗? (2认同)

小智 14

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

docker cp container_name :path_of_file_in_container destination_path_locally

例如:

docker cp sravya:/tmp/report /root/mylog
Run Code Online (Sandbox Code Playgroud)


kli*_*iew 13

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

  • `docker logs <container id> --tail = 50`可以解决问题 (3认同)

小智 9

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

找到日志的步骤也在这篇文章中列出

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

容器 ID 应该类似e03ef95c49e6686408b6033ed60b3e1e943e9115d78f51f546ecc921822454a6和不类似e03ef95c49e6

  • 它有效,您只需将完整的容器 ID 插入命令中,而不是结尾。因为它是文件夹名和文件名。势均力敌的比赛是行不通的。我得到了我的回溯。 (2认同)

icy*_*sor 7

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

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

运行为 ./viewLogs.sh CONTAINERNAME

这种方法比docker logs基于方法的优点是直接打开文件,而不是流式传输。

sudo 是必要的,因为 LogPath/File 通常是在 root 拥有的