未知docker镜像(容器)分析,docker inspect命令使用指南
发布于 作者:苏南大叔 来源:程序如此灵动~对于一个普通的镜像文件,如果能够正确使用的话,在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 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 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
相关经验文章,可以查看苏南大叔提供的下述链接地址:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。