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.pswp.cn/web/65668.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65668.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65668.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VUE + pdfh5 實現pdf 預覽,主要用來uniappH5實現嵌套預覽PDF

1. 安裝依賴 npm install pdfh5 2. pdfh5 預覽(移動端&#xff0c;h5) npm install pdfh5 , &#xff08;會報錯&#xff0c;需要其他依賴&#xff0c;不能直接用提示的語句直接npm下載&#xff0c;依舊會報錯&#xff0c;npm報錯&#xff1a;These dependencies were not fou…

Node.js——fs(文件系統)模塊

個人簡介 &#x1f440;個人主頁&#xff1a; 前端雜貨鋪 &#x1f64b;?♂?學習方向&#xff1a; 主攻前端方向&#xff0c;正逐漸往全干發展 &#x1f4c3;個人狀態&#xff1a; 研發工程師&#xff0c;現效力于中國工業軟件事業 &#x1f680;人生格言&#xff1a; 積跬步…

Microsoft Azure Cosmos DB:全球分布式、多模型數據庫服務

目錄 前言1. Azure Cosmos DB 簡介1.1 什么是 Azure Cosmos DB&#xff1f;1.2 核心技術特點 2. 數據模型與 API 支持2.1 文檔存儲&#xff08;Document Store&#xff09;2.2 圖數據庫&#xff08;Graph DBMS&#xff09;2.3 鍵值存儲&#xff08;Key-Value Store&#xff09;…

springboot項目讀取resources目錄下文件

要用以下這種方式讀取 classPathResource new ClassPathResource("template/test.docx");不能用以下這種獲取絕對路徑的方式&#xff0c;idea調試正常&#xff0c;但是部署window和linux的目錄結構不一樣&#xff0c;部署后會找不到文件&#xff0c;另外window直接…

Ruby語言的軟件開發工具

Ruby語言的軟件開發工具概述 引言 Ruby是一種簡單且功能強大的編程語言&#xff0c;它以優雅的語法和靈活性而聞名。自1995年首次發布以來&#xff0c;Ruby已經被廣泛應用于各種開發領域&#xff0c;特別是Web開發。隨著Ruby語言的普及&#xff0c;相關的開發工具也日益豐富。…

C++例程:使用I/O模擬IIC接口(6)

完整的STM32F405代碼工程I2C驅動源代碼跟蹤 一&#xff09;myiic.c #include "myiic.h" #include "delay.h" #include "stm32f4xx_rcc.h" //初始化IIC void IIC_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphCl…

CNN-BiLSTM-Attention模型詳解及應用分析

CNN-BiLSTM-Attention結構 CNN-BiLSTM-Attention結構是一種強大的深度學習架構,巧妙地結合了三種不同的技術優勢:卷積神經網絡(CNN)、雙向長短期記憶網絡(BiLSTM)和注意力機制(Attention)。這種創新性的組合使得模型能夠在處理復雜序列數據時表現出色,尤其適用于自然…

2025年華為OD上機考試真題(Java)——整數對最小和

題目&#xff1a; 給定兩個整數數組array1、array2&#xff0c;數組元素按升序排列。假設從array1、array2中分別取出一個元素可構成一對元素&#xff0c;現在需要取出k對元素&#xff0c;并對取出的所有元素求和&#xff0c;計算和的最小值。 注意&#xff1a;兩對元素如果對應…

【Java知識】Groovy 一個兼容java的編程語言

groovy語言介紹 概述一、基本特點二、主要特性三、應用領域四、與Java的比較 基本語法特性一、基本語法二、數據類型三、運算符四、字符串五、方法六、閉包七、類與對象八、異常處理九、其他特性 集成到springboot項目1. 創建Spring Boot項目2. 添加Groovy依賴3. 編寫Groovy類4…

Python網絡爬蟲:從入門到實戰

Python以其簡潔易用和強大的庫支持成為網絡爬蟲開發的首選語言。本文將系統介紹Python網絡爬蟲的開發方法&#xff0c;包括基礎知識、常用工具以及實戰案例&#xff0c;幫助讀者從入門到精通。 什么是網絡爬蟲&#xff1f; 網絡爬蟲&#xff08;Web Crawler&#xff09;是一種…

【vLLM 學習】安裝

vLLM 是一款專為大語言模型推理加速而設計的框架&#xff0c;實現了 KV 緩存內存幾乎零浪費&#xff0c;解決了內存管理瓶頸問題。 更多 vLLM 中文文檔及教程可訪問 →https://vllm.hyper.ai/ vLLM 是一個 Python 庫&#xff0c;包含預編譯的 C 和 CUDA (12.1) 二進制文件。 …

npm : 無法加載文件 D:\SoftFile\npm.ps1,因為在此系統上禁止運行腳本。

這個錯誤是由于 Windows PowerShell 的執行策略禁止執行腳本&#xff0c;導致無法運行 npm 命令。你可以通過以下步驟來解決這個問題&#xff1a; 以管理員身份運行 PowerShell&#xff1a; 點擊“開始”菜單&#xff0c;搜索“PowerShell”&#xff0c;然后右鍵點擊“Windows …

7 分布式定時任務調度框架

先簡單介紹下分布式定時任務調度框架的使用場景和功能和架構&#xff0c;然后再介紹世面上常見的產品 我們在大型的復雜的系統下&#xff0c;會有大量的跑批&#xff0c;定時任務的功能&#xff0c;如果在獨立的子項目中單獨去處理這些任務&#xff0c;隨著業務的復雜度的提高…

網絡安全 | 網絡安全法規:GDPR、CCPA與中國網絡安全法

網絡安全 | 網絡安全法規&#xff1a;GDPR、CCPA與中國網絡安全法 一、前言二、歐盟《通用數據保護條例》&#xff08;GDPR&#xff09;2.1 背景2.2 主要內容2.3 特點2.4 實施效果與影響 三、美國《加利福尼亞州消費者隱私法案》&#xff08;CCPA&#xff09;3.1 背景3.2 主要內…

Elixir語言的計算機基礎

Elixir語言的計算機基礎 引言 在當今這個快速發展的技術時代&#xff0c;編程語言層出不窮。Elixir作為一種較新的編程語言&#xff0c;以其高并發、低延遲和強大的容錯能力受到越來越多開發者的青睞。它基于Erlang虛擬機&#xff08;BEAM&#xff09;&#xff0c;自然繼承了…

mysql的mvcc理解

人閱讀 一、說到mvcc就少不了事務隔離級別&#xff08;大白話解釋&#xff09; 序列化&#xff08;SERIALIZABLE&#xff09;&#xff1a;事務之間完全隔離&#xff0c;當成一個序列&#xff0c;一個一個執行。 1 可重復讀&#xff08;REPEATABLE READ&#xff09;&#xff…

“AI智能陪練培訓服務系統,讓學習更輕松、更高效

大家好&#xff0c;我是資深產品經理小李&#xff0c;今天咱們來侃侃一個新興的教育輔助工具——AI智能陪練培訓服務系統。這個系統可謂是教育培訓行業的一股新勢力&#xff0c;它究竟有什么神奇之處呢&#xff1f;下面我就跟大家伙兒好好聊聊。 一、什么是AI智能陪練培訓服務系…

notebook主目錄及pip鏡像源修改

目錄 一、notebook主目錄修改二、pip鏡像源修改 一、notebook主目錄修改 在使用Jupyter Notebook進行數據分析時&#xff0c;生成的.ipynb文件默認會保存在Jupyter的主目錄中。通常情況下&#xff0c;系統會將Jupyter的主目錄設置為系統的文檔目錄&#xff0c;而文檔目錄通常位…

如何利用百煉智能體編排應用輕松搭建智能AI旅游助手?

各位小伙伴兒&#xff0c;好哈&#xff01; 在上一篇文章《5分鐘基于阿里云百煉平臺搭建專屬智能AI機器人》中我們體驗了如何利用阿里云百煉平臺的智能體應用搭建專屬智能機器人。 它的配置過程相對簡單&#xff0c;其“對話式”的輸出形式也十分直觀&#xff0c;非常適合初學…

.NET中的框架和運行環境

在.NET生態系統中&#xff0c;框架和運行環境是兩個不同的概念&#xff0c;它們各自扮演著重要的角色。 下面我將分別介紹.NET中的框架和運行環境&#xff0c;并解釋它們之間的區別。 .NET 框架&#xff08;Frameworks&#xff09; 框架提供了一套預定義的類庫、工具和服務&…