欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker容器使用Centos7运行java后台代码出现中文乱码

程序员文章站 2024-01-23 22:00:46
...

前言

今天学习docker 想试一下java后台的部署,于是就用springboot搭建了一个简单的demo并打成了jar包,然后下载了java的linux环境jdk,准备进行搭建。

具体过程

首先肯定是新建一个 Dockerfile

vim Dockerfile

文件里面的内容如下

from centos:7
#作者
MAINTAINER yueluo
#创建文件夹
run mkdir /usr/local/software /usr/local/software/jdk  /usr/local/software/jar
#确定工作空间
workdir /usr/local/software/jdk
#将本地的文件移动到容器中
add jdk-8u231-linux-x64.tar.gz /usr/local/software/jdk
copy saft-server-1.0.0-SNAPSHOT.jar /usr/local/software/jar
#配置环境
env JAVA_HOME /usr/local/software/jdk/jdk1.8.0_231
env JRE_HOME /usr/local/software/jdk/jdk1.8.0_11/jre
env PATH $JAVA_HOME/bin:$PATH
#执行 jar -jar
ENTRYPOINT ["java","-jar","/usr/local/software/jar/saft-server-1.0.0-SNAPSHOT.jar"]

在同级目录下 将 jar包和jdk放进来然后执行命令(注意最后的 点 表示当前目录的Dockerfile文件)

docker build -t testjava:1.0 .

显示编译成功后就使用命令进入容器

docker run -it testjava:1.0 /bin/bash

进入容器会自动启动java -jar 命令 然后就是springboot启动的文字
因为我在demo里有中文输出 ,我发现 所有的中文 全是 ???

问题产生原因

经过百度,了解到是因为镜像里的centos没有使用中文编码解析 zh_CN.UTF-8
你可以使用命令 locale 判断语言环境
Docker容器使用Centos7运行java后台代码出现中文乱码
默认使用的是 en_us 所以中文会出现问号。
通过使用命令 locale -a 来查看当前centos容器里装的语言包

Docker容器使用Centos7运行java后台代码出现中文乱码
你会发现根本就没有安装 zh_CN.UTF-8

百度了一下,找到了安装能够解析中文的centos镜像的方法
Dockerfile如下

FROM centos:7
ENV LANG=zh_CN.UTF-8 \
LANGUAGE=zh_CN:zh \
LC_ALL=zh_CN.UTF-8

RUN yum update -y && \
yum reinstall -y glibc-common && \
yum install -y telnet net-tools && \
yum clean all && \
rm -rf /tmp/* rm -rf /var/cache/yum/* && \
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# Define default command.
CMD ["bash"]

完美解决

于是我就更改了我的Dockerfile 进行重新编译

from centos:7

MAINTAINER yueluo

run mkdir /usr/local/software /usr/local/software/jdk  /usr/local/software/jar

workdir /usr/local/software/jdk

add jdk-8u231-linux-x64.tar.gz /usr/local/software/jdk
copy saft-server-1.0.0-SNAPSHOT.jar /usr/local/software/jar

ENV LANG=zh_CN.UTF-8 \
LANGUAGE=zh_CN:zh \
LC_ALL=zh_CN.UTF-8

env JAVA_HOME /usr/local/software/jdk/jdk1.8.0_231
env JRE_HOME /usr/local/software/jdk/jdk1.8.0_11/jre
env PATH $JAVA_HOME/bin:$PATH

RUN yum update -y && \
yum reinstall -y glibc-common && \
yum install -y telnet net-tools && \
yum clean all && \
rm -rf /tmp/* rm -rf /var/cache/yum/* && \
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ENTRYPOINT ["java","-jar","/usr/local/software/jar/saft-server-1.0.0-SNAPSHOT.jar"]

重新进行了docker build 和 docker run 之后
中文乱码问题解决了

docker build -t testjava:2.0 .
docker run -it testjava:2.0 /bin/bash

Docker容器使用Centos7运行java后台代码出现中文乱码
Docker容器使用Centos7运行java后台代码出现中文乱码