Docker 容器中出现中文乱码通常是由于字符编码设置不正确或缺少中文字体支持导致的。以下是几种常见的解决方法:
在 Dockerfile 或运行容器时设置正确的语言环境变量:
ENV LANG C.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL C.UTF-8
或者在运行容器时:
docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 your_image
对于需要显示中文的应用,可以在容器中安装中文字体:
RUN apt-get update && apt-get install -y \
fonts-wqy-zenhei \
fonts-wqy-microhei \
ttf-wqy-zenhei \
ttf-wqy-microhei \
&& rm -rf /var/lib/apt/lists/*
如果可能,使用已包含中文支持的镜像,如:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y locales \
&& locale-gen zh_CN.UTF-8 \
&& update-locale LANG=zh_CN.UTF-8
ENV LANG zh_CN.UTF-8
ENV LANGUAGE zh_CN:zh
ENV LC_ALL zh_CN.UTF-8
如果是在终端中查看日志出现乱码,可以尝试:
- 设置终端编码为 UTF-8
- 使用 docker logs --since 1h your_container | iconv -f gbk -t utf-8
转换编码
确保你的源代码或配置文件使用 UTF-8 编码保存,可以在 Dockerfile 中添加:
RUN apt-get update && apt-get install -y dos2unix
RUN find /app -type f -print0 | xargs -0 dos2unix
如果是数据库连接出现中文乱码,确保连接字符串包含字符集设置,如 MySQL:
jdbc:mysql://host:3306/db?useUnicode=true&characterEncoding=utf8
进入容器后可以运行以下命令验证:
locale
echo "测试中文" > test.txt
cat test.txt
如果这些方法都不能解决你的问题,可能需要根据具体的应用场景和环境进行更详细的排查。