【问题标题】:Docker look at the log of an exited containerDocker 查看已退出容器的日志
【发布时间】:2021-09-14 18:36:47
【问题描述】:

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

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

【问题讨论】:

标签: docker


【解决方案1】:

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

【讨论】:

  • 对于每隔几秒重新启动的 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" 在命令开头指定堆栈名称。
  • 对于使用--rm 标志启动的容器,它将如何工作(如果可以)?这可能吗?
【解决方案2】:

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

【讨论】:

  • @Whitefret,我已经根据您的建议更新了答案。最初的答案是将整个日志拉下来并在本地拖尾,如果日志很大,网络速度很慢,会花费很长时间
【解决方案3】:

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

dockercp container_name:path_of_file_in_container destination_path_locally

例如:

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

【讨论】:

  • 我可以使用它从已停止的 Python/Debian 容器中复制 NPM 调试日志 - 我正在寻找的日志没有显示在 Docker 的常规日志中,而是在文件中Debian系统。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

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

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

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

    【讨论】:

    • 它有效,您只需在命令中插入完整的容器 ID,而不是结尾。因为它是一个文件夹名和一个文件名。近距离匹配是行不通的。我得到了回溯。
    猜你喜欢
    • 2018-05-29
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2021-09-28
    • 1970-01-01
    • 2014-03-22
    • 2016-08-05
    相关资源
    最近更新 更多