搜尋
首頁運維Nginx怎麼滾動docker中的nginx日誌

docker使用

  1.docker ps 查看運行中的容器

  2. docker images 查看docker映像

  3. docker rm id 查看docker映像

  3. (容器id)  刪除容器(容器id可以透過docker ps查看,容器必須停止後才能刪除)

    3.1 刪除全部的容器docker rm `docker ps -a -q`

  444444444444 。

  7. docker run -it ubuntu:16.04 建立並執行容器容器

    -t 表示在新容器內指定一個偽終端或終端機

  -t 表示在新容器內指定一個偽終端或終端機

 -i對容器內的(stdin) 進行互動

    -p 指定映射埠

    -d 在後台運行容器並列印容器id

     7.建立並後台運行容器

    7.2 docker run -ditp 8080:8080(主機連接埠:容器連接埠) ubuntu:16.04 建立並後台運行容器且映射容器的連接埠

 ach8. (容器id) 進入正在運作中的容器環境

  9.退出容器

    9.1 exit 直接退出容器並終止容器運作

    9.2 [ctrl p] [

rlC.2 [ctrl p] [ct ](快捷鍵) 退出容器,但不會終止容器運行

  10. docker commit -m'版本標識' id(容器id) ubuntu:16.04(鏡像與版本號)   提交鏡像且產生鏡像(可以透過這個指令把搭建好的容器打包成一個新的鏡像或覆寫原始鏡像(即是修改原始鏡像內容,產生的鏡像名稱與版本號相同就可以直接覆寫))

好了,大家了解了docker,以下是本文介紹的重點,一起看看吧。

nginx 自己沒有處理日誌的滾動問題,它把這個球踢給了使用者。一般情況下,你可以使用 logrotate 工具來完成這個任務,或者如果你願意,你可以寫各式各樣的腳本完成同樣的任務。本文筆者介紹如何滾動運行在 docker 中的 nginx 日誌檔案(下圖來自互聯網)。 怎麼滾動docker中的nginx日誌

想法


nginx 官方其實給如何捲動日誌的說明:



rotating log-files

in order to rotate log files, they need to be renamed first. after that usr1 signal should be sent to the master process. the master process will then re-open all currently open log stm and master process will then re-open all currently open logm , as unsign user under which the worker processes are running, as an owner. after successful re-opening, the master process closes all open files and sends the message to worker process to ask them to re-open old files right away. as a result, old files are almost immediately available for post processing, such as compression.


這段說明的大意是:



•先把舊的日誌檔案重新命名
•然後給nginx master 程序發送usr1 訊號

•nginx master 程序收到訊號後會做一些處理,然後要求工作者程序重新開啟日誌檔案

•工作者進程打開新的日誌檔案並關閉舊的日誌檔案

其實真正需要我們做的工作只有前面兩點!

建立測試環境

假設你的系統中已經安裝好了docker,這裡我們直接執行一個nginx 容器:

$ docker run -d \
 -p 80:80 \
 -v $(pwd)/logs/nginx:/var/log/nginx \
 --restart=always \
 --name=mynginx \
 nginx:1.11.3

注意,我們把nginx 的日誌綁定掛載到了目前目錄下的logs 目錄下。

把下面的內容儲存到 test.sh 檔案中:

#!/bin/bash
for ((i=1;i<=100000;i++))
do
 curl http://localhost > /dev/null
 sleep 1
done

然後執行這個腳本,就可以模擬產生連續的日誌記錄。

建立滾動日誌的腳本

建立rotatelog.sh 文件,其內容如下:

#!/bin/bash
getdatestring()
{
 tz=&#39;asia/chongqing&#39; date "+%y%m%d%h%m"
}
datestring=$(getdatestring)
mv /var/log/nginx/access.log /var/log/nginx/access.${datestring}.log
mv /var/log/nginx/error.log /var/log/nginx/error.${datestring}.log
kill -usr1 `cat /var/run/nginx.pid`

getdatestring 函數取當前的時間並格式化為字串,例如"201807241310 ",筆者比較喜歡用日期和時間來命名文件。注意這裡透過 tz='asia/chongqing' 指定了時區,因為預設格式化的是 utc 時間,用起來怪怪的(要實時腦補 8 小時)。下面的兩個 mv 指令用來重新命名日誌檔。最後透過 kill 指令向 nginx master 程序發送 usr1 訊號。

透過下面的命令為rotatelog.sh 檔案新增可執行權限並複製到$(pwd)/logs/nginx 目錄下:

$ chmod +x rotatelog.sh
$ sudo cp rotatelog.sh $(pwd)/logs/nginx

定時執行滾動操作

我們的nginx 運行在容器中,所以需要在容器中給nginx master 程序發送usr1 訊號。因此我們需要透過docker exec 指令在mynginx 容器中執行rotatelog.sh 腳本:

$ docker exec mynginx bash /var/log/nginx/rotatelog.sh

執行一次上面的指令,會如期產生一批新的日誌檔:怎麼滾動docker中的nginx日誌

######

下面我們把這個指令設定在定時任務中,讓它每天早上 1 點鐘執行一次。執行crontab -e 指令,並在檔案的末端加入下面的行:

* 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh

怎麼滾動docker中的nginx日誌

#儲存並退出就可以了。下圖是筆者測試過程中每 5 分鐘滾動一次的效果:

怎麼滾動docker中的nginx日誌

#為什麼不在宿主機中直接 mv 日誌檔案?

理論上這麼做是可以的,因為透過綁定掛載的資料卷中的內容從宿主機上看和從容器中看都是一樣的。但是真正這麼做的時候你很可能碰到權限問題。在宿主機中,你一般使用的是普通用戶,而在容器中產生的日誌檔案的擁有者是會是特殊的用戶,並且一般不會給其它用戶寫和執行的權限:


怎麼滾動docker中的nginx日誌

#當然,如果你在宿主機中使用的是root 使用者就不會有問題。

能從宿主機發送的訊號嗎?

其實這個問題的全名應該是:能從宿主機中傳送訊號給 docker 容器中的 nginx master 程序嗎?

答案是,可以的。

筆者這一文中介紹了容器中訊號的捕捉問題,有興趣的朋友可以去看看。在那篇文章中我們介紹了 docker 向容器中進程發送訊號的 kill 指令。我們可以透過指令:

$ docker container kill mynginx -s usr

向容器中的1 號行程(nginx master)傳送usr1 訊號(這個方式只能傳送訊號給1 號程序):

怎麼滾動docker中的nginx日誌

結合上面的兩個問題,我們可以寫出另外的一種方式來捲動docker 中的nginx 日誌。這種方式不需要透過docker exec 指令在容器中執行指令,而完全在宿主機中完成所有的操作:

•先重新命名容器資料卷中的日誌檔案
•給容器中的1 號程序發送usr1 訊號

以上是怎麼滾動docker中的nginx日誌的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
NGINX的優點:速度,效率和控制NGINX的優點:速度,效率和控制May 12, 2025 am 12:13 AM

NGINX受歡迎的原因是其在速度、效率和控制方面的優勢。 1)速度:採用異步、非阻塞處理,支持高並發連接,靜態文件服務能力強。 2)效率:內存使用低,負載均衡功能強大。 3)控制:通過靈活的配置文件管理行為,模塊化設計便於擴展。

NGINX與Apache:社區,支持和資源NGINX與Apache:社區,支持和資源May 11, 2025 am 12:19 AM

NGINX和Apache在社區、支持和資源方面的差異如下:1.NGINX的社區雖然規模較小,但活躍度和專業性高,官方支持通過NGINXPlus提供高級功能和專業服務。 2.Apache擁有龐大且活躍的社區,官方支持主要通過豐富的文檔和社區資源提供。

NGINX單元:應用程序服務器簡介NGINX單元:應用程序服務器簡介May 10, 2025 am 12:17 AM

NGINXUnit是一個開源的應用服務器,支持多種編程語言和框架,如Python、PHP、Java、Go等。 1.它支持動態配置,可以在不重啟服務器的情況下調整應用配置。 2.NGINXUnit支持多語言應用,簡化了多語言環境的管理。 3.通過配置文件,可以輕鬆部署和管理應用,如運行Python和PHP應用。 4.它還支持高級配置,如路由和負載均衡,幫助管理和擴展應用。

使用NGINX:優化網站性能和可靠性使用NGINX:優化網站性能和可靠性May 09, 2025 am 12:19 AM

NGINX可通过以下方式提升网站性能和可靠性:1.作为Web服务器处理静态内容;2.作为反向代理服务器转发请求;3.作为负载均衡器分配请求;4.作为缓存服务器减轻后端压力。通过配置优化如启用Gzip压缩和调整连接池,NGINX能显著提高网站性能。

NGINX的目的:服務Web內容等NGINX的目的:服務Web內容等May 08, 2025 am 12:07 AM

nginxserveswebcontentandactsasareverseproxy,loadBalancer和more.1)效率高效的servesstaticContentLikeHtmlandImages.2)itfunctionsasareverseproxybalancer,and andginxenhanceperforfforfforfforfforfforffrenfcaching.4)

NGINX單元:簡化應用程序部署NGINX單元:簡化應用程序部署May 07, 2025 am 12:08 AM

NGINXUnit通過動態配置和多語言支持簡化應用部署。 1)動態配置無需重啟服務器即可修改。 2)支持多種編程語言,如Python、PHP、Java。 3)採用異步非阻塞I/O模型,提升高並發處理性能。

NGINX的影響:Web服務器及其他NGINX的影響:Web服務器及其他May 06, 2025 am 12:05 AM

NGINX起初解決C10K問題,現已發展為處理負載均衡、反向代理和API網關的全能選手。 1)它以事件驅動和非阻塞架構聞名,適合高並發。 2)NGINX可作為HTTP和反向代理服務器,支持IMAP/POP3。3)其工作原理基於事件驅動和異步I/O模型,提升了性能。 4)基本用法包括配置虛擬主機和負載均衡,高級用法涉及復雜負載均衡和緩存策略。 5)常見錯誤包括配置語法錯誤和權限問題,調試技巧包括使用nginx-t命令和stub_status模塊。 6)性能優化建議包括調整worker參數、使用gzip壓縮和

NGINX故障排除:診斷和解決常見錯誤NGINX故障排除:診斷和解決常見錯誤May 05, 2025 am 12:09 AM

Nginx常見錯誤的診斷與解決方法包括:1.查看日誌文件,2.調整配置文件,3.優化性能。通過分析日誌、調整超時設置和優化緩存及負載均衡,可以有效解決404、502、504等錯誤,提高網站穩定性和性能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)