docker日志容器乱码

Source

Docker容器乱码通常是因为容器内部的应用程序、日志输出或者交互界面使用了与容器的默认编码不兼容的字符编码。例如,容器内的应用可能默认使用UTF-8编码,而容器的终端或日志系统可能使用了如ISO-8859-1的不兼容编码,导致显示为乱码。

1、解决方法

  • 检查容器的系统语言环境变量(LANG),确保其与容器内应用程序的编码要求相匹配。
  • 如果可能,配置应用程序以使用容器的默认编码。
  • 在启动容器时,可以通过设置环境变量LANG=C.UTF-8来指定容器使用UTF-8编码。
  • 如果是日志系统导致的乱码,可以考虑使用像fluentd或者logspout这样的日志代理,它们可以转换日志的编码。
  • 在容器中安装并使用locale命令来设置正确的语言环境。
  • 如果是在Dockerfile中构建镜像,可以通过安装字体或者指定字体来解决乱码问题。

2、启动容器进行设置系统语言

docker run -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 ...

3、构建镜像设置

  • ubuntu示例Dockerfile:

FROM ubuntu
RUN apt-get update && apt-get install -y locales && \
locale-gen C.UTF-8 && \
apt-get clean && rm -rf /var/lib/apt/lists/*
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8

  • 银河麒麟示例Dockerfile:

FROM freelizhun/kylinosv10:amd64

RUN rm -rf /etc/yum.repos.d/kylin_x86_64.repo

ADD ./basekylin_x86_64.repo /etc/yum.repos.d/

RUN yum install -y glibc-locale-source && yum clean all && rm -rf /tmp/*

ENV LANG=C.UTF-8

ENV LC_ALL=C.UTF-8

ENV TZ=Asia/Shanghai

CMD ["/bin/bash"]

注:请根据实际情况选择合适的方法解决乱码问题。