Docker学习笔记(五):Dockerfile生成历史查询、修改docker容器编码格式

一、docker history使用方法再次应用

在上一篇文章中已介绍其使用教程,这里只说一些应用。

root@ovo:~# docker history --help

Usage:  docker history [OPTIONS] IMAGE

Show the history of an image

Options:
      --format string   Pretty-print images using a Go template
  -H, --human           Print sizes and dates in human readable format (default true)
      --no-trunc        Don't truncate output
  -q, --quiet           Only show image IDs

想让CREATED BY 列完整显示,可以加上 --no-trunc 参数。直接在shell中看会比较乱,可以输出到文件查看,就比较直观了。以TensorFlow镜像id,效果如下:

docker history 21d1065bfe8f --no-trunc

在这里插入图片描述这里显示有点不整齐,那是终端小的原因,自己调整一下界面就可以看到好的效果。

由于history中的命令是层级的,越晚运行的命令越在上面,为了更方便的阅读,使用tac命令让其翻转。自定义输出格式:–format:

docker history 21d1065bfe8f --format "table {{.ID}}\t{{.CreatedBy}}" --no-trunc

二、解决docker容器中文乱码,修改docker容器编码格式

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

参考文献:https://www.cnblogs.com/z-belief/p/6148463.html

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

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

  1.临时修改:
locale -a查看容器所有语言环境

    C
    C.UTF-8
    POSIX

接着这里是网上的解决方法:

LANG=C.UTF-8

然后再激活:

source /etc/profile

然而实际上这样显示是没有出问题了,但是我的hdfs命令却失效了!!!

如果提示command not find

然而发现不使用激活环境激活语句,直接也就可以看到中文正常显示了,或者使用这样进行环境变量的设置:

export LANG=C.UTF-8

当容器中其命令语句失效时,注意是否是使用了source /etc/profile语句.


    2.永久修改:修改Dockerfile

      在Dockerfile中添加一行

      ENV LANG C.UTF-8

      重新制作docker镜像,docker run -ti [镜像] 进入容器后执行locale发现编码格式已经被修改为C.UTF-8,之前出现的中文文件名乱码问题也没有了。
    3.运行时直接UTF-8
    运行的时候增加参数-e LANG=C.UTF-8即可。
例如:docker run -it --rm -e LANG=C.UTF-8 ubuntu:18.04

三、案例:使用Dockerfile 构建一个新的带有中文环境的镜像

参考文献:https://blog.csdn.net/weixin_39153210/article/details/83617792

FROM centos
MAINTAINER maochengli
#设置系统编码
RUN yum install kde-l10n-Chinese -y
RUN yum install glibc-common -y
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
#RUN export LANG=zh_CN.UTF-8
#RUN echo "export LANG=zh_CN.UTF-8" >> /etc/locale.conf
#ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8


使用 Docker build -t centos-zh . 构建一个新的镜像,这个镜像就支持中文了。

参考文献:
https://blog.csdn.net/whatday/article/details/103870042?utm_medium
https://blog.csdn.net/qq_20042935/article/details/105043400
https://github.com/davidstack/project_dockerfile/blob/master/cuda11/tensorflow/Dockerfile
https://blog.csdn.net/alionsss/article/details/105600573
https://www.cnblogs.com/z-belief/p/6148463.html
Docker命令手册
https://www.kancloud.cn/woshigrey/docker/945794
https://www.simapple.com/325.html

中文乱码问题
https://blog.csdn.net/fleaxin/article2
https://blog.51cto.com/fengwan/1891063

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 点我我会动 设计师:白松林 返回首页