docker容器中nginx日誌的分割

2022-05-02 21:24:14 字數 1565 閱讀 6726

之前寫過一篇在宿主機上的nginx日誌分割,現在應為專案執行在docker容器裡面,但是容器中並不像宿主機那樣安裝了crontab定時任務,雖然可以將crontab打包進映象,但是應為專案沒有打包進去,所以只能只能選擇其他的解決方案了。

下面我來說明一下這邊的解決方案:

在建立好映象以後,還需要通過docker run 命令來執行生成的映象檔案。但是run就需要通過引數來設定容器的一系列配置。我這裡選擇的是容器的host網路模式:

來說一下我的操作過程:

1:docker build -t imagesname . 建立映象

2:docker run  imagesname -d --name=myname --net=host  -v $(pwd)/logs/nginx:/var1/log/nginx imagesname

來說明以下:-d 就是後台執行的意思。

--name就是執行名字的容器。

--net指定host網路模式

-v 把 nginx 的日誌繫結掛載到了當前目錄下的 logs 目錄下,這是後會在當前路徑下建立乙個logs資料夾

注意:/var/log/nginx/access.log是一樣的。只不過是掛在的路徑不一樣

3:編寫乙個指令碼

#!/bin/bash

mv /var/log/nginx/access.log /var/log/nginx/access.log

mv /var/log/nginx/error.log /var/log/nginx/error.log

kill -usr1 `cat /var/run/nginx.pid`

將指令碼新增到當前路徑的logs/nginx路徑下。

4:docker exec 容器id bash $(pwd)/logs/nginx/指令碼命令執行後,或在當前路徑logs/nginx目錄下出現容器中的日誌檔案。

5:後續就可以使用宿主機的crontab定時任務了。

* * * * *  docker exec 容器id bash $(pwd)/logs/nginx/指令碼

這份文件同樣也適用於openresty,親測有效。

如果要是使用其他微服務需要使用者自己去解決

來補充一下lighttpd微服務的docker容器日誌分割,基本和上面的操作是一致的,需要將分割指令碼中的mv改成cp後然後使用echo將空值重新寫道容器中的日誌檔案中,如果使用kill殺掉httpd程序的話,需要重啟docker了,這樣可以避免容器的重新啟動。

如上**所示。歡迎提問和指正

docker中nginx容器和php容器混合執行

該容器在文章 php環境容器大 制得,亦可用docker官方提供的php環境 啟動php容器 docker run name php1 v home wwwroot service config php config usr local php etc v home wwwroot home www...

Docker容器中Nginx訪問靜態檔案404

在根目錄下建立了data目錄,data目錄下分別有乙個www和img目錄 www存放靜態html,img存放 然後在nginx配置檔案中新增動靜分離的配置。啟動nignx後訪問192.168.244.128 80 img 一直是404,檢查了配置檔案確定沒有錯誤 這是因為在docker中啟動的nig...

docker 容器之nginx 篇

2.簡單執行nginx 容器 python docker run name my nginx d p 80 80 d nginx 3.將nginx 容器的一些配置掛載到宿主目錄下 python mkdir nginx mkdir nginx conf mkdir nginx logs mkdir n...