docker啟動(dòng)jar包輸出日志的問(wèn)題以及解決
docker啟動(dòng)jar包輸出日志的問(wèn)題
由于公司使用docker, 傳統(tǒng)的docker都是在dockerfile中使用CMD或者ENTRYPOINT指定啟動(dòng)jar包命令,
如下:
ENTRYPOINT ["nohup","java","-jar","-Xms1G","-Xmx2G","-Dspring.profiles.active=prod","/xings/datamanagement.jar"]
然后查看docker logs來(lái)獲取啟動(dòng)日志, 但是這樣好像不太方便查詢和保存歷史日志. 于是我想啟動(dòng)的時(shí)候就指定日志輸出,
類似下面這樣:
ENTRYPOINT ["nohup","java","-jar","-Xms1G","-Xmx2G","-Dspring.profiles.active=prod","/xings/datamanagement.jar",">> ","/projects/datas.log","&"]
不過(guò)發(fā)現(xiàn)并不生效.
思路與解決方式
首先進(jìn)入到容器當(dāng)中去手動(dòng)啟動(dòng),發(fā)現(xiàn)可以輸出日志,
其次將日志目錄- v映射出來(lái)就可以在外面實(shí)時(shí)查看日志了
但是還有一個(gè)問(wèn)題就是我不可能每次都進(jìn)入容器里邊啟動(dòng)項(xiàng)目,但是如果寫(xiě)到dockerfile中去啟動(dòng)即死板(后期改動(dòng)jar包都需要重新build)而且不能輸出程序log日志,于是打算將鏡像抽取出來(lái),公用,然后單寫(xiě)shell去啟動(dòng)docker.
想到就開(kāi)始做:
原dockerfile文件:
FROM java:8 MAINTAINER xs COPY data-manager-agent-0.0.1-SNAPSHOT.jar /xings/datamanagement.jar RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone ENTRYPOINT ["nohup","java","-jar","-Xms1G","-Xmx2G","-Dspring.profiles.active=prod","/xings/datamanagement.jar"] ``` 將員原來(lái)死板的docker改為: ```c FROM java:8 MAINTAINER xs RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
其中run的內(nèi)容是將容器時(shí)間和本地服務(wù)器時(shí)間一致, 并且該dockerfile只構(gòu)建基礎(chǔ)鏡像,切只有一個(gè)java8, 所有只用到j(luò)ava8的項(xiàng)目都可以使用此鏡像,相對(duì)原來(lái)每次改動(dòng)代碼都需要重新傳jar包去重新build dockerfile創(chuàng)建容器方便多了.
啟動(dòng)的時(shí)候直接映射目錄,ip,和一些啟動(dòng)資源配置:
docker run --name datamanagement -v $PWD:/xings/ \ --network host --cpus 1 -m 2G \ --ipc=host --memory-swap -1 datamanagement nohup java -jar -Xms1G -Xmx2G -Dspring.profiles.active=prod data-manager-agent-0.0.1-SNAPSHOT.jar >> datam.log 2>&1 &
完美解決, 比較坑的是 下面啟動(dòng)jar包的命令(nohup…)如果是寫(xiě)腳本一定不要換行, 不然就啟動(dòng)到宿主機(jī)了,另外不要加-d,啟動(dòng)后可以ctr+z終止, 不影響日志輸出
錯(cuò)誤連寫(xiě)范例:
docker run --name datamanagement -d -v $PWD:/xings/ \ --network host --cpus 1 -m 2G \ --ipc=host --memory-swap -1 datamanagement nohup java -jar -Xms1G -Xmx2G -Dspring.profiles.active=prod data-manager-agent-0.0.1-SNAPSHOT.jar >> datam.log 2>&1 &
心得
整體的一個(gè)啟動(dòng)腳本如下 docker.sh:
#!/bin/bash set -e basepath=$(cd `dirname $0`; pwd) function easy_start { nohup java -jar -Xms1G -Xmx2G -Dspring.profiles.active=prod /xings/data-manager-agent-0.0.1-SNAPSHOT.jar >> datam.log 2>&1 & } function start { docker run --name datamanagement -v $PWD:/xings/ \ --network host --cpus 1 -m 2G \ --ipc=host --memory-swap -1 datamanagement nohup java -jar -Xms1G -Xmx2G -Dspring.profiles.active=prod data-manager-agent-0.0.1-SNAPSHOT.jar >> datam.log 2>&1 & } function stop { docker rm -f datamanagement } function restart { stop $1 $2 $3 || return 1 start $1 $2 $3 || return 1 } $@
啟動(dòng)命令直接輸入 sh docker.sh restart 即一鍵自動(dòng)化刪除原來(lái)容器并基于已有鏡像去構(gòu)造新的容器,$PWD:/xings/ 即是你關(guān)聯(lián)映射的目錄 PWD即你jar包所在路徑,/xings/即是你容器中映射的路徑,其實(shí)就是容器內(nèi)/xings下和你現(xiàn)在的PWD目錄下由于一模一樣的東西, datam.log即可直接在宿主機(jī)查看日志信息, 并且后期按天切分,日志分析,錯(cuò)誤回歸查詢等操作都很方便了。
docker看jar包日志
docker看jar包日志
docker ps -a
Error: No such container: 869c6eb7fe99
[root@kubernetes-work2 a7dea06507119d4d732094dad79d02f893e49311457225cd764321cee90f93c0]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e33bd378260 zucc-gcsm-docker.pkg.coding.net/gcsm-web/gcsm-product/java-spring-app:master-596bf1cc48b9303eef33ac8ab5ea66dffe21d63c "java -jar ./GCSM-1.…" 25 hours ago Up 25 hours 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp java-spring-app
7143bb7bb5e8 minio/minio "/usr/bin/docker-ent…" 2 days ago Up 2 days 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp, 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp affectionate_wozniak
[root@kubernetes-work2 a7dea06507119d4d732094dad79d02f893e49311457225cd764321cee90f93c0]# docker logs -f java-spring-app
名字是
java-spring-app docker logs -f java-spring-app
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
CentOS版本問(wèn)題安裝Docker報(bào)錯(cuò)的解決方案
今天小編就為大家分享一篇關(guān)于CentOS版本問(wèn)題安裝Docker報(bào)錯(cuò)的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01docker容器連接宿主機(jī)redis與mysql的配置方法
最近有朋友在工作時(shí)遇到一個(gè)問(wèn)題,docker容器無(wú)法訪問(wèn)宿主機(jī)的redis,所以這里給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于docker容器連接宿主機(jī)redis與mysql的配置方法,需要的朋友可以參考下2023-06-06docker打包鏡像后EasyExcel報(bào)錯(cuò),dockerfile缺少字體的解決
解決Docker打包鏡像后EasyExcel報(bào)錯(cuò)的問(wèn)題:1. Dockerfile增加字體配置;2. 使用EasyExcel的write時(shí)添加"inMemory"參數(shù)為true,開(kāi)啟內(nèi)存處理模式(不推薦,1W數(shù)據(jù)以內(nèi)可以考慮)2025-02-02docker?部署?時(shí)序數(shù)據(jù)庫(kù)TDengine的思路詳解
TDengineGUI是一個(gè)基于electron構(gòu)建的,針對(duì)時(shí)序數(shù)據(jù)庫(kù)TDengine的圖形化管理工具,這篇文章主要介紹了docker?部署?時(shí)序數(shù)據(jù)庫(kù)TDengine的思路詳解,需要的朋友可以參考下2025-04-04Docker network自定義網(wǎng)絡(luò)方式
這篇文章主要介紹了Docker network自定義網(wǎng)絡(luò)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Spring Boot 2.4 新特性之一鍵構(gòu)建Docker鏡像的過(guò)程詳解
這篇文章主要介紹了Spring Boot 2.4 新特性之一鍵構(gòu)建Docker鏡像的過(guò)程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12docker啟動(dòng)jar包輸出日志的問(wèn)題以及解決
這篇文章主要介紹了docker啟動(dòng)jar包輸出日志的問(wèn)題以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08