Docker容器中文乱码(修改docker容器编码格式)的解决方案

前台上传文件到服务器后,服务器返回给前台的文件列表中出现中文乱码,所有的中文文件名全部变成?,英文文件名则正常显示。

问题经过定位,发现后台代码的multipartfile类在执行transterto的方法时就发生了此异常,然而配置文件集中的multipartResolver以及encodingFilter均已经设置成了UTF-8,排除代码异常。kubectl exec进入到docker容器中进行查看时发现,文件在容器中也是中文文件名显示异常。查看docker容器编码格式:执行locale命令;可以看到当前编码格式为POSIX,而这种编码格式不支持中文

  解决办法:locale -a查看容器所有语言环境

C.UTF-8可以支持中文,只需要把容器编码设置为C.UTF-8即可

    1.临时修改:

locale
       locale -a
       LANG=C.UTF-8  (有的是zh_CN.UTF-8,不过我在本地没发现这种编码)
       source /etc/profile

2.永久修改:修改Dockerfile

在Dockerfile中添加一行

ENV LANG C.UTF-8

重新制作docker镜像,docker run -ti [镜像] 进入容器后执行locale发现编码格式已经被修改为C.UTF-8,之前出现的中文文件名乱码问题也没有了。

以上所述是小编给大家介绍的Docker容器中文乱码(修改docker容器编码格式)的解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 详解修改docker时区及docker常用命令

    前几天遇到这样一个业务场景,数据库运行在docker 中,docker 的市区是utc 所以就跟北京时间相差8个小时.但是又不能重新运行一个容器,只能保证数据库运行状态,并把宿主机的时区复制给docker 容器.很苦恼, 首先我先把宿主机的时区改成啦CST 北京时间.然后把宿主机的时区复制给docker 容器.命令如下 docker cp /etc/localtime:[容器ID或者NAME]/etc/localtime 当然也可以进入容器进行修改时区(不过我的容器修改的时候总是报/etc/lo

  • Docker创建镜像两种方法详解

     Docker创建镜像             最近学习Docker 的知识,偶然在网上看到关于Docker 创建对象的两种方法很好,这里记录下,也许可以帮助到你. 我们都知道Docker中我们是基于镜像来运行的容器,那如何创建镜像呢?创建镜像有两种方法,一是使用docker commit命令,二是使用docker build命令和Dockerfile文件.这里我们说的创建镜像是指基于一个已有的基础镜像比如ubuntu等,而不是从零创建一个全新的镜像. 下面分别简单介绍一下两种方法.      

  • Mac系统上用Docker搭建lamp环境

    前言 docker终于出来mac版本了,赶紧去下载,安装步骤,以前没有Mac版本的时候还要装docker toolbox,现在直接下载安装就好了. 安装好了的样子 状态栏 docker的提示 这个时候就可以到终端里面输入docker命令 $ docker --version Docker version 1.13.0-rc3, build 4d92237 $ docker-compose --version docker-compose version 1.9.0, build 2585387

  • Docker 解决容器时间与主机时间不一致的问题三种解决方案

    Docker容器时间与主机时间不一致 通过date命令查看时间 查看主机时间 [root@localhost ~]# date 2016年 07月 27日 星期三 22:42:44 CST 查看容器时间 root@b43340ecf5ef:/#date Wed Jul 27 14:43:31 UTC 2016 可以发现,他们相隔了8小时. CST应该是指(China Shanghai Time,东八区时间) UTC应该是指(Coordinated Universal Time,标准时间) 所以,

  • Docker 常用命令整理并介绍

    什么是Docker? Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机).bare metal.OpenStack 集群和其他的基础应用平台. Docker通常用于如下场景: web应用的自动化打包和发布: 自动化测试和持续集成.发布: 在服务型环境中部署和调整数据库或其他的后台应用: 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的P

  • Docker push镜像失败解决方法

    Docker push镜像失败的问题. 以下是输入push自己的tomcat后出现了失败 [root@slave3 ~]# docker push lekkoliu/tomcat8:latest The push refers to a repository [docker.io/lekkoliu/tomcat8] cefee3f6c961: Preparing 82f021d9c2b9: Preparing 4f91f02b4e49: Preparing a4b3ce7e1d4a: Prepa

  • Docker for windows pull镜像文件的安装位置改变的方法

    Docker for windows pull镜像文件的安装位置改变的方法 发生现象: 在windows10下安装Docker for windows,随着用docker pull image文件后,C盘的容量越来越小了,你可能也有一种跟我一样的想法,想改变默认的安装路径,本文希望能解决你的问题. 原因分析: windows上安装的docker其实本质上还是借助与windows平台的hyper-v技术来创建一个Linux虚拟机,你执行的所有命令其实都是在这个虚拟机里执行的,所以所有pull到本地

  • Docker 常用命令整理及使用注意事项总结

    常用docker命令 对docker常用命名的详细解释,让你快速学会docker的使用! docker,轻量级虚拟机,也有人称之为应用容器 优点:1.部署速度快 2.测试服务与部署可保持完全一致 常用命令 1.查看容器的root用户密码 docker logs <容器名orID> 2>&1 | grep '^User: ' | tail -n1 因为Docker容器启动时的root用户的密码是随机分配的.所以,通过这种方式就可以得到redmine容器的root用户的密码了. 2.

  • Docker出现Cannot connect to the Docker daemon. Is the docker daemon running on this host错误解决办法

    Docker出现Cannot connect to the Docker daemon. Is the docker daemon running on this host错误解决办法 发生现象: ubuntu15下,安装完Docker后,运行docker images 报错Cannot connect to the Docker daemon. Is the docker daemon running on this host? 如下图 图 原因分析: 目前我遇到这个问题是两个原因造成的,一个

  • 详解ASP.NET Core Docker部署

    前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序. ASP.NET Nginx 发布和部署 :http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html. Asp.Net Jexus 发布和部署:http://www.cnblogs.com/savorboard/p/dot-n

  • Dockerfile 部署java web的环境详解

    Dockerfile 构建java web 环境 Dockfile 介绍: Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Doc

  • 解决Docker容器时区及时间不同步问题的方法

    今天在系统集成测试时由测试人员提交了一个测试bug,原因是提交业务数据时间与实际时间(北京时间)有偏差,导致统计异常.由于我们集成测试是向测试人员直接提供完整的Docker镜像作为测试环境,原因应该是出在容器时间设置上. 拿到交付的docker镜像后,启动后进入容器控制台,使用date命令查看果然时间不正确.再查看宿主机时间是正确,这样肯定是容器启动时未将时区与宿主机保持同步了,由于测试镜像是由dockfile直接构建,因此问题基本了定准在dockerfile文件上了. 打开dockerfile

随机推荐