记录一次kylin系统部署java服务中文乱码的完整踩坑过程

任务背景

因公司业务要求,需要将目前公司内k8s部署的java应用的基础镜像又linux的alpine版本替换为银河麒麟系统,即kylinv10。

前置准备

已从公开渠道获取了精简版镜像
kylin10-x86-sp2-flat-jdk342-limited

部署JAVA服务

将原有项目中DockerFile内的基础镜像替换
FROM XXXX 替换为麒麟基础镜像

问题产生

服务启动后,通过kubectl logs打印的日志中发现中文字符都变成了问号?

通过信息检索获取到了初步的解决方案:
通过在DockerFile中指定环境变量设置字符集编码
ENV LANG=zh_CN.UTF-8
ENV LC_ALL=zh_CN.UTF-8

尝试重新部署服务后发现乱码并未解决

通过命令行进入容器检查字符集是否生效

locale

在这里插入图片描述
发现字符集仍使用的是默认字符集

检查当前镜像是否支持的字符集列表

locale -a

在这里插入图片描述
当前容器不支持zh_CN.UTF-8

解决方案

通过相同版本的麒麟镜像获取对应的字符集包,对精简版镜像进行二次封装

首先准备完整版麒麟镜像。
链接:https://pan.baidu.com/s/1EngzxiChf95MpUL6o-9jnw
提取码:xekt

通过虚拟机安装镜像

在这里插入图片描述
进入终端中修改网卡配置

cd /etc/sysconfig/network-scripts

在初始状态下,当前目录中只存在ifcfg-lo这个回环网卡
需要更换为自己的网卡信息

vi ifcfg-ens33

在这里插入图片描述
需要注意IPADDR、GATEWAY、DNS 需要根据当前网络状况配置

网卡信息修改完成后状态如下
在这里插入图片描述
重启网卡并关闭防火墙

service network restart
systemctl stop firewalld
systemctl disable firewalld

重启网卡完成后检查当前虚拟机网络状态
在这里插入图片描述
当网络正常连接后
通过ftp工具获取到对应的编码包文件
/usr/lib/locale/zh_CN.utf8
/usr/share/locale/zh_CN

在装有docker的机器上启动精简版镜像

导入本地docker镜像

将镜像包导入

docker load -i kylin10-x86-sp2-flat-jdk342-limited-20221209.tar

基础容器无主进程启动

docker run  -d -it imagename bash

将字符集文件放入镜像中

docker cp zh_CN.utf8 containerId:/usr/lib/locale
docker cp zh_CN  containerId:/usr/share/locale/zh_CN

通过命令行进入容器,并进入对应位置检查cp的文件是否存在

docker exec -it containerId bash

修改环境变量并设置字符集,在末位添加内容

vim /etc/profile  
#加入内容
export LANG=zh_CN.UTF-8
 #生效配置
source  /etc/profile

#加入重启自动生效,文末加入如下内容
vim /root/.bashrc  

#末尾加入内容
source /etc/profile

再次检查可用字符集,已经装配了zh_CN.utf8
在这里插入图片描述

将二次改造的容器重新打包为镜像

docker commit [containerId] imageName:version

将镜像打包为压缩文件

docker load -i kylin10-x86-sp2-flat-jdk342-zh-limited.tar

将镜像推送到镜像仓库

docker tag [old] [new] 

将镜像推送到镜像仓库中

docker push harbor.docker.io/kylin10-x86-sp2-flat:jdk342-zh-limited

再次将java服务中的基础镜像替换为封装的kylin即可。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值