一条命令搞定Docker容器日志出现中文乱码

背景:在使用docker部署springboot项目的时候,查看项目日志的过程中,发现中文打印出来的都是乱码: ??????,之前也没有这个情况,或许应该是docker镜像版本的问题,经过一番查找,中文可以正常输出到日志

解决方案:

1. 查看容器的编码

  • 先查看docker容器的编码

    • 进入容器: docker exec -it /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"

并且日志中的中文也正常输出

你可能感兴趣的:(Docker,docker容器中文乱码,docker日志中文乱码)