一、概述
使用alpine鏡像構建了一個oracle jdk的鏡像,運行java業務時,查看日誌,顯示中文亂碼。
但是,基於Alpine Linux
的Docker基礎鏡像的鏡像文件很小,也有代價:
- 把glibc替換爲了
musl libc
,但是musl libc
不支持國際化和本地化, 所以你想顯示中文,還得安裝glibc - 把bash替換爲了
ash
,但是ash
不支持數組特性, 但是,我們大多數已經寫好的腳本,基本上是以bash爲標準的。
實際上,基於Alpine Linux
的Docker基礎鏡像的出現, 是爲了給不需要國際化和本地化的那些人使用的,比如本來就使用英語的國家。中國人要使用,我們經常要打印中文日誌, 這時候,默認的不支持中文的顯示,所以,只會是亂碼。要想不亂碼,只能安裝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