alpine jdk 中文亂碼


一、概述

使用alpine鏡像構建了一個oracle jdk的鏡像,運行java業務時,查看日志,顯示中文亂碼。

 

但是,基於Alpine LinuxDocker基礎鏡像的鏡像文件很小,也有代價:

  • glibc替換為了musl libc,但是musl libc不支持國際化和本地化, 所以你想顯示中文,還得安裝glibc
  • bash替換為了ash,但是ash不支持數組特性, 但是,我們大多數已經寫好的腳本,基本上是以bash為標准的。

實際上,基於Alpine LinuxDocker基礎鏡像的出現, 是為了給不需要國際化和本地化的那些人使用的,比如本來就使用英語的國家。中國人要使用,我們經常要打印中文日志, 這時候,默認的不支持中文的顯示,所以,只會是亂碼。要想不亂碼,只能安裝glibc並配置上中文支持。  具體辦法:點我

 

二、解決辦法

中文問題

自己用alpine鏡像,安裝jdk和glibc,鏡像比較大。在dockerhub上面,已經有人封裝好了,直接拿來使用即可。

https://hub.docker.com/r/ringcentral/jdk

 

下載鏡像

docker pull ringcentral/jdk

 

運行鏡像,並編輯腳本

# docker run -it ringcentral/jdk /bin/sh
/ # vi 1.sh

內容如下:

#!/bin/bash

echo "大家好"

 

執行腳本

/ # bash 1.sh
大家好
/ # 

 

時區問題

還是上一個鏡像,查看時間

/ # date
Mon May 11 09:58:19 UTC 2020

發現時區是UTC,不是CST

 

需要在此鏡像基礎上,配置時區才行。

新建一個目錄 /opt/alpine-chinese-timezone

./
└── dockerfile

 

dockerfile

FROM ringcentral/jdk
RUN apk add --no-cache tzdata && \
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
    echo "Asia/Shanghai" > /etc/timezone && \
    apk del tzdata

 

生成鏡像

cd /opt/alpine-chinese-timezone
docker build -t jdk-alpine-chinese-timezone .

 

運行鏡像,查看時區

# docker run -it jdk-alpine-chinese-timezone /bin/sh
/ # date
Mon May 11 18:03:52 CST 2020
/ # 

發現時區正常了。

 

本文參考鏈接:

http://blog.fpliu.com/it/os/Unix-like/GNU-Linux/distribution/AlpineLinux

https://hub.docker.com/r/ringcentral/jdk

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM