背景:在使用docker部署springboot项目的时候,查看项目日志的过程中,发现中文打印出来的都是乱码:
??????
,之前也没有这个情况,或许应该是docker镜像版本的问题,经过一番查找,中文可以正常输出到日志
解决方案:
1. 查看容器的编码
-
先查看docker容器的编码
- 进入容器:
docker exec -it <container_name> /bin/bash
- 查看编码:显示为:
LC_CTYPE="POSIX"
都是这个样子
经过查找资料,都是临时修改容器中的编码或者修改dockerFile的环境变量,但是这里的容器是通过
docker run xxxx
启动的,所以需要在运行容器的时候指定编码 - 进入容器:
2. 修改编码方案
(1)临时修改容器中的编码
- 进入docker容器中,执行命令,更改编码
LANG=C.UTF-8
source /etc/profile
这种是临时修改容器编码,就是如果这个容器删除了,重新创建的容器还是会乱码
(2)DcokerFile中增加环境变量
- 如果是通过DockerFile创建的容器,在DockerFile中添加配置即可
- 需要加上下面这个完整的配置
ENV TZ 'Asia/Shanghai' ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8
(3) 如果是通过docker run
命令启动的容器,在运行命令时加上配置即可
- 加上中间的
-e
后面的命令即可
docker run -d \
....
-e LANG=en_US.UTF-8 \
-e LANGUAGE=en_US:en \
-e LC_ALL=en_US.UTF-8 \
....
flytangyu/jdk:1.8
等待容器启动之后,进入容器,查看编码:
locale
显示:
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
并且日志中的中文也正常输出