本文主要是介绍ubuntu20.04基础镜像中jdk8.0中文乱码问题(需要加上ENV LANG C.UTF-8和ENV LC_ALL C.UTF-8),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 描述
- 原因
- 解决
描述
# 基础镜像
FROM ubuntu:20.04# 避免在安装过程中,有些程序需要交互式输入(如地区设置等)
ARG DEBIAN_FRONTEND=noninteractive# 更新软件包列表,安装必要的软件包
RUN apt-get update && apt-get install -y \python3 \python3-pip \cmake \libgl1-mesa-glx \libglib2.0-0 \build-essential \openjdk-8-jdk \&& rm -rf /var/lib/apt/lists/*# 在Docker镜像构建过程中使用&& rm -rf /var/lib/apt/lists/*的原因是为了减小镜像大小。这个命令会删除在安装软件包时由apt-get update命令下载的包列表文件。这些文件在构建镜像后就不再需要了,但它们会占用额外的磁盘空间。删除这些文件有以下几个好处:
# 1. 减少镜像大小:每一层都会增加镜像的总大小。删除不必要的文件可以减少镜像层的大小,从而减少整个镜像的大小。
# 2. 优化拉取/推送时间:较小的镜像可以更快地从Docker仓库拉取和推送。
# 3. 提高安全性:减少不必要的文件可以减少潜在的安全风险,尽管/var/lib/apt/lists/*主要是包列表文件,不大可能成为安全威胁,但遵循最小化安装的原则总是一个好习惯。
# 在Dockerfile中进行多个安装步骤时,通常推荐在RUN命令的最后加上这个步骤,这样做是为了保持Docker镜像的清洁和高效。如果你在之后的某个步骤中还需要安装其他软件包,可能需要再次运行apt-get update,因为之前的包列表已经被删除了。这是一个在Docker镜像构建过程中权衡磁盘空间和构建步骤复杂度的典型例子。# 暴露端口
EXPOSE 8080# 设置容器入口点
ENTRYPOINT ["java","-jar","/ky/install/java/kykj.jar","--spring.config.location=/ky/install/java/application.yml"]
我这样打包了镜像,然后run了一个容器:
docker run -d \-e TZ="Asia/Shanghai" \--restart=always \-p 8080:8080 \-p 11111:11111 \-v /etc/localtime:/etc/localtime \-v /ky/ky_ai_solution.json:/opt/ky_ai_solution.json \-v $DEPLOY_PATH/mount:/ky/install/java \-v $DEPLOY_PATH/mount/lib:/lib/hk \--name $CONTAINER_NAME \$IMAGE_NAME:$IMAGE_TAG
然后里面程序打印日志的时候发现无法打印汉字,打印出来的是乱码
原因
如果在使用openjdk:8
基础镜像时容器内的中文显示正常,而在切换到ubuntu:20.04
作为基础镜像后出现了乱码问题,这主要是由于两个镜像在本地化(locale)和字符编码配置上的差异。openjdk:8
镜像可能已经预配置了支持UTF-8编码的环境变量和相关的本地化设置,而ubuntu:20.04
镜像则可能没有预设这些配置,或者预设的配置不同。
在openjdk:8
镜像中,它基于的底层操作系统镜像(如Debian或Ubuntu)可能已经包含了针对Java应用更友好的环境设置,包括字符编码的配置。这意味着当你基于openjdk:8
构建你的镜像时,你的应用继承了这些有利于支持多语言(包括中文)显示的环境设置。
相比之下,当你从ubuntu:20.04
这样的更通用的基础镜像开始构建时,可能需要手动进行一些配置来确保相同的支持,如设置LANG
和LC_ALL
环境变量为C.UTF-8
或其他支持UTF-8的本地化设置。这是因为ubuntu
镜像通常保持较为"干净"的状态,只包含最基础的系统配置,以便用户可以根据自己的需求进行定制。
因此,当你从ubuntu:20.04
基础镜像构建自定义镜像时,添加如下环境变量设置是有必要的:
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
这样做能够确保你的容器环境支持UTF-8字符编码,进而正确显示中文。这一步骤在使用openjdk:8
基础镜像时可能不是必需的,因为该镜像已经预配置了相应的环境。
解决
按照上面在dockerfile中加上:
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
果然就好了。
ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ
ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ
这篇关于ubuntu20.04基础镜像中jdk8.0中文乱码问题(需要加上ENV LANG C.UTF-8和ENV LC_ALL C.UTF-8)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!