docker 构建指定版本的jdk容器,并用docker部署jar包

您所在的位置:网站首页 docker打包容器 docker 构建指定版本的jdk容器,并用docker部署jar包

docker 构建指定版本的jdk容器,并用docker部署jar包

2023-03-12 02:39| 来源: 网络整理| 查看: 265

docker 构建指定版本的jdk容器,并部署jar包 阅读前置要求 有在Linux系统安装docker的经验,会使用docker常用命令,能明白构建docker容器参数的含义 1、 新建目录,并创建 Dockerfile 文件 # 新建目录,并创建 Dockerfile 文件 $ mkdir -p /mydata/docker/dockerfiles # -p参数,允许创建多个文件夹 $ vim /mydata/docker/dockerfiles/Dockerfile # 上传 jdk1.8安装包和jar包,并放到dockerfiles目录下,跟Dockerfiles文件同级目录 $ mv /home/vagrant/jdk-8u361-linux-aarch64.tar.gz /mydata/docker/dockerfiles/ 2、vi 编辑 Dockerfile 文件内容 ,并保存

将如下内容拷贝 到 Dockerfile ,保存并退出。 我用的jdk安装包是 jdk-8u361-linux-aarch64.tar.gz,你只需要修改它换成你的jdk安装包

#!/bin/bash FROM centos:7 MAINTAINER hzl # 设置系统编码 RUN yum install kde-l10n-Chinese -y RUN yum install glibc-common -y RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 RUN export LANG=zh_CN.UTF-8 RUN echo "LANG=zh_CN.UTF-8" > /etc/locale.conf ENV LANG zh_CN.UTF-8 ENV LC_ALL zh_CN.UTF-8 # ADD 拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压 (注意:拷贝的文件要跟Dockerfile文件同级) # 将jdk1.8添加到/usr/local/pro/jdk目录下并解压 ADD jdk-8u361-linux-aarch64.tar.gz /usr/local/jdk ENV JAVA_HOME=/usr/local/jdk/jdk1.8.0_361 ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH=$JAVA_HOME/bin:$PATH 3、 构建镜像 # 以cenos7为基础,安装jdk1.8后构建容器,名为:java ,版本号:jdk1.8.0_361 $ docker build -t java8:jdk1.8.0_361 /mydata/docker/dockerfiles/ # 查看本地仓库,镜像是否安装成功 $ docker images 4、部署jar包 $ docker run -d -p 88:88 --restart=always \ -v /home/vagrant/xxx-gateway-0.0.1-SNAPSHOT.jar:/usr/local/jar/xxx-gateway.jar \ --name xxx-gateway java8:jdk1.8.0_361 java -jar -Dserver.port=88 /usr/local/jar/xxx-gateway.jar FAQ FAQ1 :docker启动后 ,提示“standard_init_linux.go:211: exec user process caused “exec format error“”

用 docker build 完jdk镜像后,用命令docker inspect 容器id | grep Architecture,检查Linxu版本,发现是 官网下载的jdk 打包的Linux系统是 arm64。

原因:Linxu版本不兼容

我主机运行的 Linux version是 3.10.0-1127.el7.x86_64 , 而官网下载的jdk1.8 构建后的Linxu version 显示是 arm64系统 由于Linxu 版本不兼容才导致的这个问题。 如果一定要使用官网jdk1.8的话,要解决这个问题,我就只能换一个LInux系统版本,换成跟官网jdk匹配的arm64系统,这样无疑浪费时间。

排查过程参考: standard_init_linux.go:211: exec user process caused “exec format error“_星光落入你灰蒙蒙的眼的博客-CSDN博客

解决办法

我的办法是:换一个能在我这个Linxu系统版本跑的 jdk 安装包,从docker远程仓库下载 ,命令:docker pull ibmjava 详细安装过程看我另外一篇文章 docker 安装 jdk 环境(从远处仓库下载安装)

安装完成后,使用 docker images 命令,查看新的镜像

# 启动ibmjava 容器, 部署jar包 $ docker run -d -p 88:88 --restart=always \ -v /home/vagrant/xxx-gateway-0.0.1-SNAPSHOT.jar:/usr/local/jar/xxx-gateway.jar \ --name xxx-gateway ibmjava java -jar -Dserver.port=88 /usr/local/jar/xxx-gateway.jar # 查看容器启动日志 $ docker logs xxx-gateway FAQ2 :docker logs查看jar启动日志,提示“‘no main manifest attribute, in /xx/xx.jar“ 原因 :打包问题,没有把启动类打进去。 解决办法:修改pom文件,重新打包 org.springframework.boot spring-boot-maven-plugin repackage true xxx.xxx.xxx.Application


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3