docker日志


docker日志

首先我們先日常運行一個nginx容器,日志會在終端輸出訪問日志以及錯誤日志

[root@localhost ~]# docker run -it -p 80:80 nginx

現在我們打開網站訪問一下nginx

 

 

 

 因為我們在啟動日志的時候沒有使用-d參數,httpd容器以前台方式啟動,日志會直接打印到當前的終端窗口。 加-d參數以后后台方式運行容器,我們就看不到輸出的日志了

這種情況下如果要查看容器的日志,有兩種方法 attach到該容器

[root@localhost ~]# docker attach 2ecf757
192.168.172.1 - - [20/Jun/2020:06:34:03 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"
192.168.172.1 - - [20/Jun/2020:06:34:03 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"
192.168.172.1 - - [20/Jun/2020:06:34:04 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"

用docker logs 命令查看日志

attach 的方法在實際使用中不太方便,因為:

1.只能看到attach之后的日志,以前的日志不可見

2.退出attach狀態比較麻煩ctrl+p+q 一不小心很榕溪將容器殺掉,查看容器推薦的方法是 docker logs命令

[root@localhost ~]# docker logs -f 22fbc207a41a6d
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
192.168.172.1 - - [20/Jun/2020:06:39:55 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"
192.168.172.1 - - [20/Jun/2020:06:39:55 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"
192.168.172.1 - - [20/Jun/2020:06:39:55 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36" "-"

docker logs能夠打印出容器啟動以來完整的日志,並且 -f參數可以繼續打印出新產生的日志效果上和linux  tail -f一樣

docker支持多種日志方案

將容器日志發送到stdout 和stderr是docker的默認日志行為,實際上 docker提供了多種日志機制幫助用戶從運行的容器中提取日志信息,這些機制被稱作logging driver

docker默認的logging driver是json-file

[root@localhost ~]# docker info |grep 'Logging Driver'
 Logging Driver: json-file

如果容器在啟動時沒有特別指明,就會使用這個默認的json-file 會將容器的日志保存在json文件中,docker 負責格式化其內容 並輸出到stdout和stderr 我們可有再host 的容器目錄中找到這個文件容器路徑為

[root@localhost ~]# docker container inspect 22fbc207a41a |grep 'LogPath'
        "LogPath": "/var/lib/docker/containers/22fbc207a41a6dc8227dd705768a635a729fd778b57da7632f7cf92a6e8c091e/22fbc207a41a6dc8227dd705768a635a729fd778b57da7632f7cf92a6e8c091e-json.log",

 

 

 

 none是disable容器日志功能

syslog和journald 是linux上的兩種日志管理服務

awslogs     splunk和gcplogs是第三方日志托管服務

gelf和fluentd是兩種開源的日志管理方案

容器啟動時可以通過 --log driver 指定使用的logging driver 如果要設置docker默認的 logging driver 需要修改 docker daemon的啟動腳本,指定 --log-driver參數

[root@localhost ~]# docker info |grep 'Logging Driver'
 Logging Driver: none

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM