之前寫過一篇在宿主機上的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/bashmv /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...