我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

对于一个普通的镜像文件,如果能够正确使用的话,在docker run的时候,就必须正确设置相关的参数,比如常见的:端口-p,目录-v,环境变量-e

截至到发稿,最新docker版本号为:18.06.1-ce, build e68fc7a,一定要正确一次性设置docker run的参数,因为这些参数设置错误之后,并没有好的办法修改这些参数。只能rm掉参数错误的容器,然后,再run一个新的容器。这个操作是比较痛苦的。如果当前的容器里面有重要的不能删除的数据,那么您还可以选择,把当前的容器提交为镜像,然后重新run这个新的镜像为容器,达到修改run参数的目的。

估计,在以后的docker版本中,官方会推出docker update -p/docker update -v/docker update -e之类的修改方法。但是,目前,是不支持这样操作的。

苏南大叔:未知docker镜像(容器)分析,docker inspect命令使用指南 - dockers
未知docker镜像(容器)分析,docker inspect命令使用指南(图2-1)

所以,在docker run之前,一定要想好自己要传递的参数,是什么样的。本文中,苏南大叔讲述的命令叫做docker inspect。可以用于分析一个未知的镜像文件(也可以分析一个容器),有备无患。在docker run的时候,能够做到有所准备。

为了更好的得出结论,以便于印证文章观点。那么,这里分析的镜像或容器,是基于下面这篇文章中,使用Dockerfile构建的docker镜像结果。

docker inspect命令预览

inspect的单词翻译为查看docker inspect可以作用于镜像,也可以作用于容器。两者的返回者结果略有不同。

docker inspect <image_id>

或者

docker inspect <container_id>

docker inspect的返回值是个json类似的字符串,可以使用-f 或者--format=来细化一下领域,只读取某一特定的json节点。特殊的是:这个format的格式是非常奇怪的,{{.<节点路径>}}。两个大括号外加一个点,然后是路径。

docker inspect -f '{{.<节点路径>}}' <容器名称或镜像名称>
docker inspect --format='{{.<节点路径>}}' <容器名称或镜像名称>

如下分析中,都是苏南大叔自己总结的。不排除会出现一些错误或者不全的。您可以根据自己的需求,自己总结下面的这些命令。总结的方式,也非常简单。你可以先不加-f参数,查看一下总体的json结构。找到你的目标位置后,写出节点路径即可。

注意,要写个绝对路径。大部分大家关心的内容都在{{.Config}}这个节点之中。当然,也不排除其它的节点位置。容器和镜像的inspect结果是不一致的,但是都有config这个总节点的。镜像的inspect结果中,还存在一个ContainerConfig节点。

所以,大部分情况下,你所需要的套路是这样的:

docker inspect -f '{{.Config.<节点名字>}}' <image_id或container_id>

苏南大叔:未知docker镜像(容器)分析,docker inspect命令使用指南 - docker-inspect
未知docker镜像(容器)分析,docker inspect命令使用指南(图2-2)

端口分析

镜像:

docker inspect -f '{{.Config.ExposedPorts}}' <image_id>
docker inspect -f '{{.ContainerConfig.ExposedPorts}}' <image_id>

容器:

docker inspect -f '{{.Config.ExposedPorts}}' <container_id>

目录分析

镜像:

docker inspect -f '{{.Config.Volumes}}' <image_id>

对于镜像,这里还可以分析一个WokingDir信息。比如:

docker inspect -f '{{.Config.WorkingDir}}' <image_id>

容器:

docker inspect -f '{{.Config.Volumes}}' <container_id>
docker inspect -f '{{.Mounts}}' <container_id>

入口文件分析

docker inspect -f '{{.Config.Cmd}}' <image_id>
docker inspect -f '{{.Config.Entrypoint}}' <image_id>

环境变量分析

docker inspect -f '{{.Config.Env}}' <image_id>

对于运行中的容器,也可以使用docker exec -it <name> /bin/bash进入容器后,执行命令export,也可以看到具体的环境参数情况。

总结

当然,可以通过查看docker ps列表,获取容器的参数情况。大家自行试试即可。
更多docker相关经验文章,可以查看苏南大叔提供的下述链接地址:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   docker