访问已停止的泊坞窗容器的日志

由于过去的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 

尽pipe如此,我的磁盘已经被创build的容器图像充满了,而且我必须根据这篇文章采取行动来清理一个月左右。 那么,我可以访问过去的日志吗?

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

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

默认情况下,销毁容器也会删除日志。 如果你需要日志,你必须指定一个–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“重新创build”的,所以如果你不指定日志驱动程序的东西,日志链接到容器的生命周期。

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

正如问题所述,容器被杀死不会被销毁(移除),您仍然可以访问未运行容器的日志,执行docker logs <container-id>

您可以使用以下命令找出未运行容器的标识: docker ps -a

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