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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章