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

背景:在使用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"

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

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值