Docker Desktop 构建java8基础镜像jdk安装配置失效解决

Docker Desktop 构建java8基础镜像jdk安装配置失效解决

文章目录

  • 1.问题
  • 2.解决方法
  • 3.总结

1.问题

  之前的好几篇文章中分享了在Linux(centOs上)和windows10上使用docker和docker Desktop环境构建java8的最小jre基础镜像,前几天我使用Docker Desktop环境重新构建了一个java8最小jre基础镜像,使用之前windows上使用的dockerfile构建是没有啥问题,但是本地项目引入该基础镜像之后,启动应用的容器,查看日志发现报了一个如下错误:

/bin/sh: java: not found

  这也是一个奇葩的问题,在Linux上使用之前Linx上构建的dockerflie构建之后,引入项目构建镜像启动容器验证java应用可以正常启动,并且请求接口java应用正常,不会挂掉,后面经过一番艰苦的排查之后,才发现是手动构建安装glibc相关的包在windows上构建失效了,最后导致jdk的二进制文件无法使用glibc来运行,所以报了这个错。

2.解决方法

  Dockerfile中的基础镜像使用的是:alpine:3.12.0,后面我一想,居然是glibc失效了,那去docker仓库上找一个alpine包含了glibc的镜像,果然找到了一个:frolvlad/alpine-glibc,直接改为这个是最latest版本,替换之后,应用可以正常启动,但是访问应用接口只有,报了一个系统资源限制层面的错误:

try "ulimit -c unlimited" before starting Java again

  从而导致应用挂了,这个也是一个奇葩的问题,试了网上各种解决方法,最后都是无效的,后面又去docker仓库上找了一个带有glibc版本的alpine镜像:frolvlad/alpine-glibc:alpine-3.5_glibc-2.25,这个镜像版本跟之dockerflie中构建手动安装glibc的版本接近,后面拿过来一试,果然把上面那个问题解决了,容器运行访问应用接口,应用不会挂了。

需要准备如下文件:
在这里插入图片描述

Dockerfile_jre1.8.0_271构建文件内容如下:

# using frolvlad/alpine-glibc:alpine-3.5_glibc-2.25
FROM frolvlad/alpine-glibc:alpine-3.5_glibc-2.25
# author
MAINTAINER BigFei<2514207794@qq.com>
# date zone 设置时间,避免相差8个小时
RUN echo "https://mirrors.aliyun.com/alpine/v3.6/main/" > /etc/apk/repositories
RUN echo "https://mirrors.aliyun.com/alpine/v3.6/community/" >> /etc/apk/repositories
# 更新系统的软件包
RUN ["apk","update"]
RUN ["apk","add","curl"]
RUN ["apk","add","wget"]
# 安装bash
RUN ["apk","add","bash"]
# 安装bash-doc
RUN ["apk","add","bash-doc"]
#安装bash自动命令补全
RUN ["apk","add","bash-completion"]
# 时区设置
RUN apk add --update --no-cache \tzdata && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#安装glibc相关的包(下面是升级了glibc的版本,重试了还是不行,干脆glibc的都注释了,使用一个带有glibc的基础镜像不就行了)
# 清理临时文件要在 同一个RUN命令内进行, rm -rf .....,构建的时候每个RUN都会创建一个临时的容器,只有写在同一个RUN下才会在一个容器内执行
#RUN apk --no-cache add ca-certificates wget ; \
#    wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub ; \
#    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r1/glibc-bin-2.35-r1.apk ; \
#    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r1/glibc-i18n-2.35-r1.apk ; \
#    wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r1/glibc-2.35-r1.apk ; \
#    apk add glibc-bin-2.35-r1.apk glibc-i18n-2.35-r1.apk glibc-2.35-r1.apk ;\
#    rm -rfv glibc-bin-2.35-r1.apk glibc-i18n-2.35-r1.apk glibc-2.35-r1.apk
# locale.md 见下面的内容
COPY ./locale.md /locale.md
RUN /bin/sh -c cat locale.md | xargs -i /usr/glibc-compat/bin/localedef -i {} -f UTF-8 {}.UTF-8
# A streamlined jre
ADD ./jre1.8.0_271.tar.gz /usr/local/java/jdk/
# set env
# 时区环境变量
ENV TZ Asia/Shanghai
# 语言环境变量
ENV LANG=en_US.UTF-8 \LANGUAGE=en_US.UTF-8
ENV JAVA_HOME /usr/local/java/jdk/
ENV PATH ${PATH}:${JAVA_HOME}/bin
#WORKDIR /opt

  上面这个构建脚本经过我的亲测试是OK的,到此这个问题就解决了。

3.总结

  Windwos环境和Linux环境系统差异会导致有的东西使用会存在兼容差异,jre最小镜像构建都可以构建成功,但是能不能用还有待验证,所以只有时间才能出真知,多踩踩坑,自然就轻车熟路了,java8以上的java版本构建最小镜像使用的是其他方法,后面有机会在分享,上面那个成功的脚本构建的镜像有390M,原因就是里面安装的包太多了,基础frolvlad/alpine-glibc:alpine-3.5_glibc-2.25才5-6M,不安装一些命令工具包,不方便使用,所以这个根据个人使用习惯去构建即可,本次分享到此结束,希望我的分享对你有所启发和帮助,请一键三连,么么么哒!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/1417.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Uniapp-Vue3】页面生命周期onLoad和onReady

一、onLoad函数 onLoad在页面载入时触发&#xff0c;多用于页面跳转时进行参数传递。 我们在跳转的时候传递参数name和age: 接受参数&#xff1a; import {onLoad} from "dcloudio/uni-app"; onLoad((e)>{...}) 二、onReady函数 页面生命周期函数中的onReady其…

【STM32-学习笔记-8-】I2C通信

文章目录 I2C通信Ⅰ、硬件电路Ⅱ、IIC时序基本单元① 起始条件② 终止条件③ 发送一个字节④ 接收一个字节⑤ 发送应答⑥ 接收应答 Ⅲ、IIC时序① 指定地址写② 当前地址读③ 指定地址读 Ⅳ、MPU6050---6轴姿态传感器&#xff08;软件I2C&#xff09;1、模块内部电路2、寄存器地…

WINFORM - DevExpress -> devexpress版--报表(report)

devexpress report模板 1.安装devexpress(DevExpress 总结【安装、案例】_caoyanchao1的博客-CSDN博客_devexpress) 2.新建vs项目且添加standarReportDesigner控件 涛神设计器注意 3.运行后步骤 点击New Report DetailReport 涛神设计器checkbox(3.复选框只认boolean类型的 b…

亿道三防丨三防笔记本是什么意思?和普通笔记本的优势在哪里?

三防笔记本是什么意思&#xff1f;和普通笔记本的优势在哪里&#xff1f; 在现代社会中&#xff0c;笔记本电脑已经成为人们工作和生活中不可或缺的一部分。然而&#xff0c;在一些特殊行业或环境中&#xff0c;普通笔记本电脑由于其脆弱性和对环境条件的敏感性&#xff0c;往…

opencv的NLM去噪算法

NLM&#xff08;Non-Local Means&#xff09;去噪算法是一种基于图像块&#xff08;patch&#xff09;相似性的去噪方法。其基本原理是&#xff1a; 图像块相似性&#xff1a;算法首先定义了一个搜索窗口&#xff08;search window&#xff09;&#xff0c;然后在该窗口内寻找…

ElasticSearch在Windows环境搭建测试

引子 也持续关注大数据相关内容一段时间&#xff0c;大数据内容很多。想了下还是从目前项目需求侧出发&#xff0c;进行相关学习。Elasticsearch&#xff08;ES&#xff09;是位于 Elastic Stack&#xff08;ELK stack&#xff09; 核心的分布式搜索和分析引擎。Logstash 和 B…

Docker安装和卸载(centos)

Docker安装和卸载 一&#xff0c;已安装Docker&#xff0c;卸载Docker 1.方法一 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine​ 如果出现以下提示就证明没卸载…

《自动驾驶与机器人中的SLAM技术》ch8:基于 IESKF 的紧耦合 LIO 系统

目录 基于 IESKF 的紧耦合 LIO 系统 1 IESKF 的状态变量和运动过程 1.1 对名义状态变量的预测 1.2 对误差状态变量的预测及对协方差矩阵的递推 2 观测方程中的迭代过程 3 高维观测中的等效处理 4 NDT 和 卡尔曼滤波的联系 5 紧耦合 LIO 系统的主要流程 5.1 IMU 静止初始化 …

认识机器学习中的经验风险最小化准则

经验风险最小化准则的定义 经验风险最小化&#xff08;Empirical Risk Minimization&#xff0c;简称 ERM&#xff09;是机器学习中的一种基本理论框架&#xff0c;用于指导模型的训练过程。其核心思想是通过最小化训练数据上的损失函数来优化模型参数&#xff0c;从而提高模型…

使用Deepseek搭建类Cursor编辑器

使用Deepseek搭建类Cursor编辑器 Cursor想必大家都用过了&#xff0c;一个非常强大的AI编辑器&#xff0c;在代码编写上为我们省了不少事&#xff0c;但高昂的价格让我们望而却步&#xff0c;这篇文章教你在Visual Studio Code上搭建一个类Cursor的代码编辑器。 步骤其实非常…

SpringCloud系列教程:微服务的未来(十一)服务注册、服务发现、OpenFeign快速入门

本篇博客将通过实例演示如何在 Spring Cloud 中使用 Nacos 实现服务注册与发现&#xff0c;并使用 OpenFeign 进行服务间调用。你将学到如何搭建一个完整的微服务通信框架&#xff0c;帮助你快速开发可扩展、高效的分布式系统。 目录 前言 服务注册和发现 服务注册 ​编辑 …

【MySQL】SQL菜鸟教程(一)

1.常见命令 1.1 总览 命令作用SELECT从数据库中提取数据UPDATE更新数据库中的数据DELETE从数据库中删除数据INSERT INTO向数据库中插入新数据CREATE DATABASE创建新数据库ALTER DATABASE修改数据库CREATE TABLE创建新表ALTER TABLE变更数据表DROP TABLE删除表CREATE INDEX创建…

【Vue实战】Vuex 和 Axios 拦截器设置全局 Loading

目录 1. 效果图 2. 思路分析 2.1 实现思路 2.2 可能存在的问题 2.2.1 并发请求管理 2.2.2 请求快速响应和缓存带来的问题 3. 代码实现 4. 总结 1. 效果图 如下图所示&#xff0c;当路由变化或发起请求时&#xff0c;出现 Loading 等待效果&#xff0c;此时页面不可见。…

无源器件-电容

电容器件的参数 基本概念由中学大学物理或电路分析内容获得&#xff0c;此处不做过多分析。 电容的产量占全球电子元器件产品的40%以上。 单位&#xff1a;法拉 F&#xff1b;1F10^6uF&#xff1b;电路中常见的104电容就是10*10^4pF100nF0.1uF C为电容&#xff0c;Rp为绝缘电…

python实现自动登录12306抢票 -- selenium

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 python实现自动登录12306抢票 -- selenium 前言其实网上也出现了很多12306的代码&#xff0c;但是都不是最新的&#xff0c;我也是从网上找别人的帖子&#xff0c;看B站视频&…

Genymotion配套VirtualBox所在地址

在 Genymotion打开虚拟机前需要先打开VirtualBox中的虚拟机 C:\Program Files\Oracle\VirtualBox\VirtualBox.exe 再开启genymotion中的虚拟机开关

浅谈云计算06 | 云管理系统架构

云管理系统架构 一、云管理系统架构&#xff08;一&#xff09;远程管理系统&#xff08;二&#xff09;资源管理系统&#xff08;三&#xff09;SLA 管理系统&#xff08;四&#xff09;计费管理系统 二、安全与可靠性保障&#xff08;一&#xff09;数据安全防线&#xff08;…

泛目录和泛站有什么差别

啥是 SEO 泛目录&#xff1f; 咱先来说说 SEO 泛目录是啥。想象一下&#xff0c;你有一个巨大的图书馆&#xff0c;里面的书架上摆满了各种各样的书&#xff0c;每一本书都代表着一个网页。而 SEO 泛目录呢&#xff0c;就像是一个超级图书管理员&#xff0c;它的任务就是把这些…

WebScoket-服务器客户端双向通信

文章目录 1. 消息推送常用方式介绍2. WebSocket2.1 介绍2.2 客户端API2.3 服务端API 3. 总结 1. 消息推送常用方式介绍 轮询 浏览器以指定的时间间隔向服务器发出HTTP请求&#xff0c;服务器实时返回数据给浏览器。 长轮询 浏览器发出ajax请求&#xff0c;服务器端接收到请求…

uniapp 之 uni-forms校验提示【提交的字段[‘xxx‘]在数据库中并不存在】解决方案

目录 场景问题代码结果问题剖析解决方案 场景 uni-forms官方组件地址 使用uniapp官方提供的组件&#xff0c;某个表单需求&#xff0c;单位性质字段如果是高校&#xff0c;那么工作单位则是高校的下拉选择格式&#xff0c;单位性质如果是其他的类型&#xff0c;工作单位则是手动…