docker启动jar包输出日志的问题以及解决

 更新时间:2023年08月23日 15:47:19   作者:vi__ky  
这篇文章主要介绍了docker启动jar包输出日志的问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

docker启动jar包输出日志的问题

由于公司使用docker, 传统的docker都是在dockerfile中使用CMD或者ENTRYPOINT指定启动jar包命令,

如下:

ENTRYPOINT ["nohup","java","-jar","-Xms1G","-Xmx2G","-Dspring.profiles.active=prod","/xings/datamanagement.jar"]        

然后查看docker logs来获取启动日志, 但是这样好像不太方便查询和保存历史日志. 于是我想启动的时候就指定日志输出,

类似下面这样:

ENTRYPOINT ["nohup","java","-jar","-Xms1G","-Xmx2G","-Dspring.profiles.active=prod","/xings/datamanagement.jar",">> ","/projects/datas.log","&"] 

不过发现并不生效.

思路与解决方式

首先进入到容器当中去手动启动,发现可以输出日志,

其次将日志目录- v映射出来就可以在外面实时查看日志了

但是还有一个问题就是我不可能每次都进入容器里边启动项目,但是如果写到dockerfile中去启动即死板(后期改动jar包都需要重新build)而且不能输出程序log日志,于是打算将镜像抽取出来,公用,然后单写shell去启动docker.

想到就开始做:

原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"]      
           ```                                           
将员原来死板的docker改为:
```c
FROM java:8
MAINTAINER xs
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

其中run的内容是将容器时间和本地服务器时间一致, 并且该dockerfile只构建基础镜像,切只有一个java8, 所有只用到java8的项目都可以使用此镜像,相对原来每次改动代码都需要重新传jar包去重新build dockerfile创建容器方便多了.

启动的时候直接映射目录,ip,和一些启动资源配置:

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 &

完美解决, 比较坑的是 下面启动jar包的命令(nohup…)如果是写脚本一定不要换行, 不然就启动到宿主机了,另外不要加-d,启动后可以ctr+z终止, 不影响日志输出

错误连写范例:

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 &

心得

整体的一个启动脚本如下 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
}
$@

启动命令直接输入 sh docker.sh restart 即一键自动化删除原来容器并基于已有镜像去构造新的容器,$PWD:/xings/ 即是你关联映射的目录 PWD即你jar包所在路径,/xings/即是你容器中映射的路径,其实就是容器内/xings下和你现在的PWD目录下由于一模一样的东西, datam.log即可直接在宿主机查看日志信息, 并且后期按天切分,日志分析,错误回归查询等操作都很方便了。

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker镜像+nginx 部署 vue 项目的方法

    Docker镜像+nginx 部署 vue 项目的方法

    这篇文章主要介绍了Docker镜像+nginx 部署 vue 项目的方法,帮助大家更好的使用docke镜像,感兴趣的朋友可以了解下
    2020-10-10
  • spring-boot构建docker镜像上传仓库的示例教程

    spring-boot构建docker镜像上传仓库的示例教程

    这篇文章主要介绍了spring-boot构建docker镜像上传仓库,受限创建一个简单spring-boot-web项目,查看镜像上传仓库这时候有两种解决方案,对docker镜像上传仓库相关知识感兴趣的朋友跟随小编一起看看吧
    2022-12-12
  • docker中通过nginx+confd动态生成配置的解决方案

    docker中通过nginx+confd动态生成配置的解决方案

    这篇文章主要介绍了docker:nginx+confd动态生成配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Docker Compose+Nestjs构建Dapr Redis发布订阅分布式应用

    Docker Compose+Nestjs构建Dapr Redis发布订阅分布式应用

    这篇文章主要为大家介绍了Docker Compose+Nestjs构建Dapr Redis发布订阅分布式应用步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • 基于Docker部署Dubbo+Nacos服务的过程

    基于Docker部署Dubbo+Nacos服务的过程

    这篇文章主要介绍了基于Docker部署Dubbo+Nacos服务,本文介绍基于 Docker 部署一套 Dubbo + Nacos 的微服务环境,并解决容器里的 IP 及端口的访问问题,需要的朋友可以参考下
    2023-02-02
  • 如何使用Docker快速搭建服务器环境

    如何使用Docker快速搭建服务器环境

    这篇文章主要介绍了使用Docker快速搭建服务器环境的详细步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • Docker日志太多导致磁盘占满的处理方法

    Docker日志太多导致磁盘占满的处理方法

    这篇文章主要介绍了Docker日志太多导致磁盘占满的处理方法,需要的朋友可以参考下
    2018-10-10
  • docker-compose安装部署NebulaGraph图数据库的详细过程

    docker-compose安装部署NebulaGraph图数据库的详细过程

    NebulaGraph Studio是一款可以通过Web访问的开源图数据库可视化工具,搭配NebulaGraph内核使用,提供构图、数据导入、编写nGQL查询等一站式服务,这篇文章主要介绍了docker-compose安装部署NebulaGraph图数据库的详细过程,感兴趣的朋友一起看看吧
    2023-12-12
  • docker容器配置启动参数

    docker容器配置启动参数

    通过添加参数,我们可以在启动 Docker 容器时灵活地配置容器的行为,本文介绍了通过命令行和 Dockerfile 两种方式添加参数的方法,并给出了常用参数的示例,希望本文能帮助您理解如何在 Docker 启动时添加参数,并正确地配置和管理 Docker容器
    2023-10-10
  • docker中run命令30个常用参数详解和示例

    docker中run命令30个常用参数详解和示例

    这篇文章主要给大家介绍了关于docker中run命令30个常用参数的相关资料,docker run命令是Docker中最常用的命令之一,用于创建并启动一个新的容器实例,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01

最新评论