一條命令搞定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"

並且日誌中的中文也正常輸出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章