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

文章描述了如何将基于alpine的java应用迁移到银河麒麟(kylinv10)系统,遇到中文乱码问题。通过设置环境变量、检查字符集支持及对基础镜像进行二次封装,最终成功解决乱码问题,并将改造后的镜像推送到镜像仓库。

任务背景

因公司业务要求,需要将目前公司内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即可。

### Kylin 离线安装 JavaJavac 并配置环境 在离线环境下为 **Kylin** 操作系统部署 **Java** 和 **Javac**,需要提前准备好 JDK 的压缩包文件,并通过手动解压、配置环境变量的方式完成安装。以下是详细的步骤和方法。 --- #### 1. 准备工作 - 获取适用于 Linux 的 **JDK 压缩包**(例如 `jdk-8u271-linux-x64.tar.gz` 或更高版本),确保与目标系统的架构一致(如 x86_64)。 - 将该压缩包拷贝到 Kylin 系统的目标路径中,例如 `/usr/local/` 或 `/opt/software/`。 ```bash # 创建目录(如果不存在) mkdir -p /usr/local/jdk # 将 JDK 压缩包复制到指定目录 cp jdk-8u271-linux-x64.tar.gz /usr/local/jdk/ cd /usr/local/jdk/ # 解压 JDK 包 tar -zxvf jdk-8u271-linux-x64.tar.gz ``` 解压后会生成一个包含 JDK 文件的目录,如 `jdk1.8.0_271` [^3]。 --- #### 2. 配置环境变量 为了使 `java` 和 `javac` 在终端中全局可用,需要配置 `JAVA_HOME`、`PATH` 和 `CLASSPATH` 等环境变量。建议将这些配置写入 `/etc/profile` 文件中,以便所有用户都能使用。 ```bash vim /etc/profile ``` 在文件末尾添加如下内容(根据实际解压路径修改): ```bash export JAVA_HOME=/usr/local/jdk/jdk1.8.0_271 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ``` 保存并退出编辑器后,执行以下命令使配置生效: ```bash source /etc/profile ``` 这样可以确保所有用户共享相同的 Java 环境变量,并且便于后续版本升级时统一修改 `/etc/profile` 文件 [^2]。 --- #### 3. 验证安装 执行以下命令验证 `java` 和 `javac` 是否配置成功: ```bash java -version javac -version ``` 如果输出显示了正确的版本信息,则表示安装和配置成功。 --- #### 4. 注意事项 - 若需更换 JDK 版本,只需替换 `/usr/local/jdk/` 下的解压目录,并修改 `/etc/profile` 中的 `JAVA_HOME` 路径即可,无需重新配置其他用户环境 [^1]。 - 确保所使用的 JDK 版本与 Kylin 系统兼容,推荐使用长期支持版本(如 JDK 8 或 JDK 11)。 - 如果 `/opt/software` 目录不存在,可自行创建用于存放安装包 [^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值