由于过去的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-compose -f docker-compose-production.yaml down
docker-compose -f docker-compose-production.yaml up -d --build
答案 0 :(得分:4)
默认情况下,销毁容器也会删除日志。如果需要日志,则必须指定--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历史命令链接到图像,而不是容器(容器==运行指定图像的实例)
答案 1 :(得分:3)
由于问题表明容器被杀死而未被销毁(已移除),您仍然可以访问未运行容器的日志docker logs <container-id>
您可以使用以下代码查找未运行容器的ID:docker ps -a
只要您拥有默认的泊坞日志记录驱动程序。