目錄
- 概述
- 環境
- 具體操作如下
- 1.查看系統支持和默認的字符集,更新yum
- 2.下載中文包和對應的依賴包
- 3.添加UTF-8和GBK和GB2312字符集
- 4.修改系統字符集
- 5.退出容器重啟服務器
- 6.檢查容器字符集
- 后續一:重啟容器使用nohup命令看日志發現還是亂碼,再重啟項目jar包反而不亂碼了,emo了
- 后續二:這樣上述改后又出現問題了,發現數據庫插入中文數據的時候數據庫亂碼了,emo++
- 總結
概述
docker部署java開發web項目。nohup顯示打印日志出現中文亂碼,中文顯示為問號???。
環境
服務器系統:centos7、docker部署項目
具體操作如下
1.查看系統支持和默認的字符集,更新yum
locale -a #查看系統支持字符集 echo $LANG #查看默認字符集 yum update

2.下載中文包和對應的依賴包
yum install -y kde-l10n-Chinese yum reinstall -y glibc-common rpm -qa | grep glibc-common-2.17-222.el7.x86_64 yum groupinstall “fonts” -y yum install -y system-config-language
3.添加UTF-8和GBK和GB2312字符集
localedef -c -f UTF-8 -i zh_CN zh_CN.utf8 localedef -c -f GBK -i zh_CN zh_CN.GBK localedef -c -f GB2312 -i zh_CN zh_CN.GB2312 locale -a #查看

4.修改系統字符集
echo ‘LANG=“zh_CN.UTF-8”' > /etc/locale.conf #修改系統字符集 source /etc/locale.conf echo ‘export LC_ALL=“zh_CN.utf8”' >> /etc/profile source /etc/profile
5.退出容器重啟服務器
exit reboot
6.檢查容器字符集
echo $LANG echo $LC_ALL touch 中文.txt

后續一:重啟容器使用nohup命令看日志發現還是亂碼,再重啟項目jar包反而不亂碼了,emo了
思路:修改自啟動系統文件(一般是/etc/rc.d/rc.local)中的java -jar命令(添加-Dfile.encoding=utf-8)
java -Dfile.encoding=utf-8 -jar xxx.jar --spring.profiles.active=pro >nohup.out &
前提條件是java項目Maven打包的時候添加依賴(原因:Java源代碼->Java字節碼->JVM->操作系統)
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
后續二:這樣上述改后又出現問題了,發現數據庫插入中文數據的時候數據庫亂碼了,emo++
經歷:經嘗試,發現docker run使用 /bin/bash命令初始化的時候會亂碼和/usr/sbin/init命令不會,但是容器內很多服務不啟動 思路:創建容器run的時候,給容器定義編碼格式(添加’-e LANG=en_US.UTF-8’)
docker run -dit -p 映射端口:端口 --name=容器名 -e LANG=en_US.UTF-8 鏡像名 /bin/bash






