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

 

posted @   肖祥  阅读(1852)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2018-05-08 python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)
点击右上角即可分享
微信分享提示