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 常用命令整理并介绍

    Docker 常用命令整理并介绍

    这篇文章主要介绍了Docker 常用命令的知识,这里介绍了Docker 的操作容器,Image,网络操作,等内容,有需要的小伙伴可以参考下
    2016-10-10
  • docker-compose安装db2数据库操作

    docker-compose安装db2数据库操作

    这篇文章主要介绍了docker-compose安装db2数据库操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • 在docker上安装运行mysql实例

    在docker上安装运行mysql实例

    Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
    2017-01-01
  • Docker如何部署您的第一个应用程序

    Docker如何部署您的第一个应用程序

    这篇文章主要介绍了Docker如何部署您的第一个应用程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 一文快速入门Docker推荐

    一文快速入门Docker推荐

    这篇文章主要介绍了一文快速入门Docker推荐,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-06-06
  • Docker部署Vue项目的项目实践

    Docker部署Vue项目的项目实践

    本文主要介绍了Docker部署Vue项目的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • 使用docker compose搭建一个elk系统的方法

    使用docker compose搭建一个elk系统的方法

    这篇文章主要介绍了使用docker-compose搭建一个elk系统的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • docker 多个-e参数的具体使用

    docker 多个-e参数的具体使用

    在使用Docker镜像运行容器时,我们可以通过使用-e参数来设置环境变量,有时我们需要设置多个环境变量,这就涉及到如何实现多个-e参数的问题,本文就来详细的介绍一下
    2024-01-01
  • 创建Web项目的Docker镜像实例讲解

    创建Web项目的Docker镜像实例讲解

    这篇文章主要介绍了创建Web项目的Docker镜像实例讲解的相关资料,需要的朋友可以参考下
    2016-10-10
  • Windows下Docker安装各种软件的详细过程

    Windows下Docker安装各种软件的详细过程

    这篇文章主要介绍了Windows下Docker安装各种软件的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07

最新评论