背景:在使用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"
並且日誌中的中文也正常輸出