詳解Docker在哪里保存日志文件
調(diào)試大多數(shù) Linux 程序通常涉及檢查日志文件,這可能是一個(gè)復(fù)雜的過(guò)程。但是,在 Docker 下的容器化環(huán)境中運(yùn)行時(shí),您需要使用更具體的工具來(lái)調(diào)試生產(chǎn)中的應(yīng)用程序。
日志存儲(chǔ)在哪里?
簡(jiǎn)單的答案是 Docker 將容器日志存儲(chǔ)在其主要存儲(chǔ)位置/var/lib/docker/. 每個(gè)容器都有一個(gè)特定于其 ID 的日志(完整 ID,而不是通常顯示的縮短的 ID),您可以像這樣訪問(wèn)它:
/var/lib/docker/containers/ID/ID-json.log
這 就是它們的存儲(chǔ)位置,但由于它們采用 JSON 格式,因此不易讀取,并且必須使用完整的容器 ID 很煩人。Docker 提供了一個(gè)內(nèi)置命令來(lái)查看它們:
docker logs -f e4bd48ef3103
在這里,該-f 標(biāo)志將保持提示打開并“關(guān)注”文件中的任何新條目。您還可以使用–tail 該文件,或使用–timestamps 來(lái)顯示日志時(shí)間,或使用–until并 --since 根據(jù)時(shí)間進(jìn)行過(guò)濾。
如果您使用 Docker Compose,則可以使用其中的 log 命令輕松查看所有日志:
docker-compose logs
但是,您會(huì)注意到的一件事是 STDOUT 和 STDERR,它們對(duì)很多事情都很有用,但只顯示 Docker 文件中“CMD”指定的入口點(diǎn)的控制臺(tái)輸出。許多應(yīng)用程序都有自己的專用日志系統(tǒng),這些系統(tǒng)通常會(huì)記錄到/var/log/nginx/access.log. 仍然可以通過(guò) Docker 從主機(jī)端訪問(wèn)這樣的日志。
從容器內(nèi)的應(yīng)用程序查看日志
根據(jù)容器的不同,這可能不是必需的。例如,默認(rèn)的 NGINX 容器設(shè)置為將其 Docker 日志發(fā)送到 STDOUT 以簡(jiǎn)化日志檢查。它使用/dev/stdout 指向日志文件的符號(hào)鏈接來(lái)執(zhí)行此操作,您可以為容器設(shè)置類似的內(nèi)容。
RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
但是,如果您想查看容器內(nèi)的特定文件,您可以這樣做。Docker 提供的exec -it 命令允許您在任何正在運(yùn)行的 Docker 進(jìn)程中運(yùn)行任何命令。使用它,您可以在 Docker 容器內(nèi)跟蹤日志文件:
docker exec -it e4bd48ef3103 tail -f log.txt
因?yàn)檫@允許您運(yùn)行任何命令,所以您可以使用journalctl 或任何其他您想要的調(diào)試策略,只要您以docker exec -it. /bin/bash 如果你想跳進(jìn)去四處逛逛,你甚至可以跑步。
一個(gè)更適合主機(jī)服務(wù)的永久性解決方案是使用 Docker 卷掛載。您可以將類似目錄綁定/var/log/nginx 到主機(jī)可見的卷。首先,創(chuàng)建一個(gè)新卷:
docker volume create nginx-logs
并使用以下命令運(yùn)行容器–mount:
docker run -d \ --name devtest \ --mount source=nginx-logs,target=/var/log/nginx \ nginx:latest
如果您使用 Docker Compose,則該過(guò)程可以自動(dòng)化:
version: "3.0" services: web: image: nginx:latest ports: - "80:80" volumes: - nginx-logs:/var/log/nginx/ volumes: nginx-logs:
這樣,主機(jī)上的任何日志聚合服務(wù)都可以直接攝取日志文件。
查看 Docker 守護(hù)進(jìn)程日志
如果您想查看服務(wù)器上整個(gè) Docker 服務(wù)的特定日志,而不是任何特定的容器化應(yīng)用程序,您需要查看journalctl 日志:
sudo journalctl -fu docker.service
這是它在大多數(shù)系統(tǒng)上的存儲(chǔ)位置,但在某些系統(tǒng)上的位置不同:
- 亞馬遜Linux: /var/log/docker
- CentOS/RHEL: /var/log/messages | grep docker
- 蘋果: ~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
- Windows: AppData\Roaming\Docker\log\vm\dockerd.log?
到此這篇關(guān)于詳解Docker在哪里保存日志文件的文章就介紹到這了,更多相關(guān)Docker保存日志文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Docker如何保存對(duì)容器的修改問(wèn)題
- docker保存鏡像到本地并加載本地鏡像文件詳解
- docker鏡像的拉取登陸上傳及保存等相關(guān)使用命令
- Docker創(chuàng)建一個(gè)mysql容器并保存為本地鏡像
- Docker鏡像保存為文件及從文件導(dǎo)入鏡像的方法
- 修改docker默認(rèn)存儲(chǔ)位置的兩種方法
- docker修改默認(rèn)存儲(chǔ)位置圖文教程
- Docker Desktop更改鏡像存儲(chǔ)位置的實(shí)現(xiàn)
- Docker配置本地鏡像與容器的存儲(chǔ)位置
- Docker 修改docker存儲(chǔ)位置 修改容器鏡像大小限制操作
- Docker配置容器位置與小技巧總結(jié)
- 淺談docker容器鏡像的保存位置
相關(guān)文章
物理機(jī)與啟動(dòng)的Docker容器間的目錄映射方式
這篇文章主要介紹了物理機(jī)與啟動(dòng)的Docker容器間的目錄映射方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11Docker 運(yùn)行多個(gè)Springboot的詳細(xì)教程
這篇文章主要介紹了Docker 運(yùn)行多個(gè)Springboot的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12詳解docker鏡像centos7配置Java運(yùn)行環(huán)境
基于docker官網(wǎng)centos7鏡像配置java運(yùn)行環(huán)境,自己安裝jdk和tomcat,解決docker容器與宿主機(jī)時(shí)間不一致問(wèn)題2017-05-05docker中run命令30個(gè)常用參數(shù)詳解和示例
這篇文章主要給大家介紹了關(guān)于docker中run命令30個(gè)常用參數(shù)的相關(guān)資料,docker?run命令是Docker中最常用的命令之一,用于創(chuàng)建并啟動(dòng)一個(gè)新的容器實(shí)例,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01Docker安裝Redis容器的實(shí)現(xiàn)步驟
本文主要介紹了Docker安裝Redis容器的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09解決Docker x509 insecure registry的問(wèn)題
這篇文章主要介紹了解決Docker x509 insecure registry的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03