Docker查看退出容器的日志


102

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

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


Answers:


105

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

4
对于每隔几秒钟重启一次的Docker堆栈: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"在命令开头指定堆栈名称。
x-yuri

17

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


1
@Whitefret,我已经用您的建议更新了答案。原始答案将整个日志拉下并在本地尾部记录,如果日志很大且网络速度很慢,则将花费很长时间
Matthew

在警报管理器中,我看到了很多此类消息,但不确定是否与警报相关:
Arnav Bose

10

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

docker cp container_name :path_of_file_in_container destination_path_locally

例如:

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

6

要在更少的时间内直接查看已退出容器的日志文件,滚动到文件末尾,我使用:

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

以./viewLogs.sh CONTAINERNAME的身份运行

docker logs基于方法的方法相比,此方法的好处在于,直接打开文件而不是将其流式传输。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.