alpine日志中文乱码的问题解决方案

客官°小女子只卖身不卖艺 2022-05-08 08:42 1202阅读 0赞

今天客户提了个问题过来,说是日志显示中文乱码

查看了客户的基础镜像是alpine的,经度娘出来了一个方案:
重新打镜像,设置默认的编码格式是中文

dockerfile信息

  1. FROM base-alpine #这里写你的基础镜像
  2. ENV LANG=C.UTF-8
  3. # Here we install GNU libc (aka glibc) and set C.UTF-8 locale as default.
  4. RUN ALPINE_GLIBC_BASE_URL="https://github.com/sgerrand/alpine-pkg-glibc/releases/download" && \
  5. ALPINE_GLIBC_PACKAGE_VERSION="2.27-r0" && \
  6. ALPINE_GLIBC_BASE_PACKAGE_FILENAME="glibc-$ALPINE_GLIBC_PACKAGE_VERSION.apk" && \
  7. ALPINE_GLIBC_BIN_PACKAGE_FILENAME="glibc-bin-$ALPINE_GLIBC_PACKAGE_VERSION.apk" && \
  8. ALPINE_GLIBC_I18N_PACKAGE_FILENAME="glibc-i18n-$ALPINE_GLIBC_PACKAGE_VERSION.apk" && \
  9. apk add --no-cache --virtual=.build-dependencies wget ca-certificates && \
  10. echo \
  11. "-----BEGIN PUBLIC KEY-----\
  12. MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApZ2u1KJKUu/fW4A25y9m\
  13. y70AGEa/J3Wi5ibNVGNn1gT1r0VfgeWd0pUybS4UmcHdiNzxJPgoWQhV2SSW1JYu\
  14. tOqKZF5QSN6X937PTUpNBjUvLtTQ1ve1fp39uf/lEXPpFpOPL88LKnDBgbh7wkCp\
  15. m2KzLVGChf83MS0ShL6G9EQIAUxLm99VpgRjwqTQ/KfzGtpke1wqws4au0Ab4qPY\
  16. KXvMLSPLUp7cfulWvhmZSegr5AdhNw5KNizPqCJT8ZrGvgHypXyiFvvAH5YRtSsc\
  17. Zvo9GI2e2MaZyo9/lvb+LbLEJZKEQckqRj4P26gmASrZEPStwc+yqy1ShHLA0j6m\
  18. 1QIDAQAB\
  19. -----END PUBLIC KEY-----" | sed 's/ */\n/g' > "/etc/apk/keys/sgerrand.rsa.pub" && \
  20. wget \
  21. "$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
  22. "$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
  23. "$ALPINE_GLIBC_BASE_URL/$ALPINE_GLIBC_PACKAGE_VERSION/$ALPINE_GLIBC_I18N_PACKAGE_FILENAME" && \
  24. apk add --no-cache \
  25. "$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
  26. "$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
  27. "$ALPINE_GLIBC_I18N_PACKAGE_FILENAME" && \
  28. \
  29. rm "/etc/apk/keys/sgerrand.rsa.pub" && \
  30. /usr/glibc-compat/bin/localedef --force --inputfile POSIX --charmap UTF-8 "$LANG" || true && \
  31. echo "export LANG=$LANG" > /etc/profile.d/locale.sh && \
  32. \
  33. apk del glibc-i18n && \
  34. \
  35. rm "/root/.wget-hsts" && \
  36. apk del .build-dependencies && \
  37. rm \
  38. "$ALPINE_GLIBC_BASE_PACKAGE_FILENAME" \
  39. "$ALPINE_GLIBC_BIN_PACKAGE_FILENAME" \
  40. "$ALPINE_GLIBC_I18N_PACKAGE_FILENAME"

重新build镜像

进到容器里面查看环境变量会找到这个环境变量LANG=C.UTF-8

  1. / # env
  2. HOSTNAME=dec5fc33fbe3
  3. SHLVL=1
  4. HOME=/root
  5. TERM=xterm
  6. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/default/bin
  7. LANG=C.UTF-8
  8. GLIBC_VERSION=2.25-r0
  9. PWD=/
  10. JAVA_HOME=/usr/java/default
  11. / # /usr/glibc-compat/bin/locale -a
  12. C
  13. C.utf8
  14. POSIX

测试通过

参考
UTF-8 locale for glibc-dependent applications
dockerfile
基于官方镜像制作tomcat-alpine镜像
centos-1
修改Docker容器的字符集
解决docker容器中,日志中文乱码问题
Docker容器中添加中文字符的支持

发表评论

表情:
评论列表 (有 0 条评论,1202人围观)

还没有评论,来说两句吧...

相关阅读