簡體   English   中英

如何重新連接到 docker 日志 --follow 日志文件被刪除的位置

[英]how to reconnect to a docker logs --follow where the log file was deleted

我有一個 docker 容器在磁盤空間有限的小型 AWS 實例中運行。 日志越來越大,所以我使用以下命令刪除了不斷增長的日志文件:

sudo -s -H
find /var -name "*json.log" | grep docker | xargs -r rm
journalctl --vacuum-size=50M

現在我想看看正在運行的 docker 容器之一的行為是什么,但它聲稱日志文件已經消失(來自上面的rm命令):

ubuntu@x-y-z:~$ docker logs --follow name_of_running_docker_1
error from daemon in stream: Error grabbing logs: open /var/lib/docker/containers/d9562d25787aaf3af2a2bb7fd4bf00994f2fa1a4904979972adf817ea8fa57c3/d9562d25787aaf3af2a2bb7fd4bf00994f2fa1a4904979972adf817ea8fa57c3-json.log: no such file or directory

我希望能夠再次看到正在運行的容器中發生了什么,所以我嘗試了:

sudo touch /var/lib/docker/containers/d9562d25787aaf3af2a2bb7fd4bf00994f2fa1a4904979972adf817ea8fa57c3/d9562d25787aaf3af2a2bb7fd4bf00994f2fa1a4904979972adf817ea8fa57c3-json.log

再次docker follow ,但是在與應該生成日志的軟件交互時,我可以看到沒有任何事情發生。

有沒有辦法在不殺死(重新啟動)容器的情況下再次將打印恢復到日志文件中?

有沒有辦法在不殺死(重新啟動)容器的情況下再次將打印恢復到日志文件中?

是的,但這更像是一個技巧而不是真正的解決方案。 你不應該直接與/var/lib/docker數據交互 根據Docker 文檔

主機文件系統的一部分 [which] 由 Docker (Linux 上的/var/lib/docker/volumes/ )管理。 非 Docker 進程不應修改文件系統的這一部分。


為了使這個技巧起作用,您需要在首次運行我們的容器之前配置您的Docker 守護程序以在停機期間保持容器活動 例如,通過將/etc/docker/daemon.json設置為:

{
  "live-restore": true
}

這需要重啟守護進程,例如sudo systemctl restart docker

然后創建一個容器並刪除它的.log文件:

$ docker run --name myhttpd -d httpd:alpine
$ sudo rm $(docker inspect myhttpd -f '{{ .LogPath }}')

# Docker is not happy
$ docker logs myhttpd
error from daemon in stream: Error grabbing logs: open /var/lib/docker/containers/xxx-json.log: no such file or directory

重新啟動守護程序(使用實時恢復),這將導致 Docker 以某種方式重新管理我們的容器並創建我們的日志文件。 但是,在刪除日志文件之前生成的任何日志都會丟失。

$ sudo systemctl restart docker
$ docker logs myhttpd # works! and log file is created back

注意:這不是記錄或官方 Docker 功能,只是我在使用 Docker 19.03的實驗中觀察到的行為。 它可能不適用於其他 Docker 版本

啟用實時恢復后,即使 Docker 守護進程停止,我們的容器進程也會繼續運行。 在 Docker 守護進程重新啟動時,它可能以某種方式嘗試從仍然活動的進程stdoutstderr重新讀取並將 output 重定向到我們的日志文件(因此重新創建它)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM