docker springboot日志挂载到宿主卷轴

阅读更多
springboot服务运行在docker容器中,产生的日志会随容器删除而被删除,而且也不好管理日志,比如做日志切割等,所以我们一般会把日志挂载到宿主机器上,这样运维人员也好管理日志,从日志定位问题也比较方便。

前提必须安装了docker和jdk8

1.首先需要让springboot产生日志文件到某个目录,比如/logs目录,一般情况下,springboot运行是没有日志文件产生的,这个日志文件并不是catalina.out,catalina.out为控制台输出,可以通过docker logs实时查看,但并不会生成一个日志文件的,之前一直以为catalina.out有输出就会在挂载卷有日志文件存在,其实不会,懵逼了好久。
这里我们可以结合logback,就是给springboot配置logback-spring.xml,然后让日志输出到/logs 目录下
logback-spring.xml如下:


    
    

    
    

    
    
        
            
            [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %highlight([%-5level] %logger{50} - %msg%n)
            UTF-8
        
    

       
       
        
            
            ${LOG_HOME}/catalina.%d{yyyy-MM-dd}.log 
            
            15
           
         
             
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n   
         
        
       
         10MB
       
     
    
     
    
    
    
    
    
    
    
        
            
            
        
    

    
    
        
            
        
    



这样springboot就会产生日志到/logs下了,这一步很重要

2.有了日志文件产生,下一步我们就给springboot做镜像了。
先通过maven把springboot打包成demo2.jar
然后在linux上新建一个文件夹
mkdir /opt/demo2

把demo2.jar放到这个文件夹下
然后在此目录下新建一个Dockerfile文件
Dockerfile内容如下:
FROM java:8
ADD demo2.jar demo2.jar
EXPOSE 8087
ENTRYPOINT ["nohup","java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo2.jar","--spring.profiles.active=dev",">>","catalina.out","2>&1","&"]


执行命令创建镜像
docker build -t demo2 .

执行命令运行镜像,产生容器
docker run -d --name demo2 -v /opt/demo2/logs:/logs demo2

注意必须,得有-v /opt/demo2/logs:/logs 执行容器的挂载目录

好了,我们进入容器查询,是否产生了日志文件,进入容器命令
docker exec -it demo2 /bin/sh

此次容器内的/logs目录下已经产生了catalina.log日志文件
然后退出容器,到宿主机器的/opt/demo2/logs/也有了一样的catalina.log日志文件


同样利用了logback做日志管理,按时间切割,按大小清理日志,挺好的



你可能感兴趣的:(docker,springboot,logback,日志挂载)