【问题标题】:Access logs of a killed docker container被杀死的 docker 容器的访问日志
【发布时间】:2017-09-25 13:22:54
【问题描述】:

由于过去的 docker 容器占用了空间,我最近不得不清理整个磁盘。所以我假设我可以访问被杀死的容器的日志。

例如我有一个容器的 docker 历史:

$ docker history xxx_app
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
d7cfe17fc42a        56 minutes ago      /bin/sh -c #(nop)  EXPOSE 3000/tcp              0 B                 
cd26ca1108f0        56 minutes ago      /bin/sh -c #(nop) COPY dir:8daa84a931569267ab   62.27 MB            
6fa873fcc7bb        9 days ago          /bin/sh -c npm install && npm cache clean       177.8 MB            
67a23b0934d8        9 days ago          /bin/sh -c #(nop) COPY file:5dcb2a83410d0aa7f   1.529 kB            
3b7197885c91        3 weeks ago         /bin/sh -c #(nop)  ENV NODE_ENV=                0 B                 
79a447242ea5        3 weeks ago         /bin/sh -c #(nop)  ARG NODE_ENV                 0 B                 
b1909b86ce39        3 weeks ago         /bin/sh -c #(nop)  CMD ["npm" "start"]          0 B                 
<missing>           3 weeks ago         /bin/sh -c #(nop)  ONBUILD COPY . /usr/src/ap   0 B                 
<missing>           3 weeks ago         /bin/sh -c #(nop)  ONBUILD RUN npm install &&   0 B                 
<missing>           3 weeks ago         /bin/sh -c #(nop)  ONBUILD COPY package.json    0 B                 
<missing>           3 weeks ago         /bin/sh -c #(nop)  ONBUILD ENV NODE_ENV $NODE   0 B                 
<missing>           3 weeks ago         /bin/sh -c #(nop)  ONBUILD ARG NODE_ENV         0 B                 
<missing>           3 weeks ago         /bin/sh -c #(nop)  WORKDIR /usr/src/app         0 B                 
...

但访问日志时出现错误:

docker logs 67a23b0934d8
Error: No such container: 67a23b0934d8

尽管如此,我的磁盘已被创建的容器映像填满,我不得不在大约一个月前按照this article 采取行动进行清理。那么,我可以访问过去的日志吗?

PS:我对docker不是很了解,接过一个项目。每次代码更新后容器重启的方式是这样的:

docker-compose -f docker-compose-production.yaml down
docker-compose -f docker-compose-production.yaml up -d --build

【问题讨论】:

  • 您是否在这里混淆了图像和容器?历史记录用于图像,您尝试使用图像 id 来获取容器的日志。

标签: logging docker


【解决方案1】:

默认情况下,销毁容器也会删除日志。如果需要日志,则必须指定 --log-driver 选项。在现代 GNU/Linux 机器上,使用 journald,例如使用 docker run 命令

docker run --log-driver=journald

另一个使用 docker-compose.yml 语法的例子:

mycontainer:
    image: myimage
    logging:
        driver: journald
        options:
            tag: mytag

然后使用journalctl命令+过滤规则访问日志

journalctl -u docker CONTAINER_NAME=mycontainer_name

journalctl -u docker CONTAINER_TAG=mytag

标签在您运行多服务应用程序时很有用,例如使用 docker-compose。

我认为在您的情况下,容器是使用 docker-compose “重新创建”的,因此如果您不指定日志记录驱动程序的内容,日志将链接到容器生命周期。

另外,Docker 历史命令链接到一个镜像,而不是一个容器(容器 == 指定镜像的运行实例)

【讨论】:

  • 很好的解决方案!附加问题:默认情况下,日志翻转或压缩日志?或者它可以写满一个磁盘吗?
【解决方案2】:

由于问题表明容器被杀死而不是销毁(删除),您仍然可以访问未运行容器的日志docker logs &lt;container-id&gt;

你可以通过docker ps -a找到未运行容器的ID

只要你有默认的 docker logging 驱动程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2016-07-31
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    相关资源
    最近更新 更多