docker inspect 是必不可少的 Docker 命令之一。它能让你提取各种 docker 对象的信息,知道如何使用它是每个人都应该知道的事情。inspect 的主要优势在于其格式化功能,例如您可以通过检查运行中的容器来提取其 IP 地址,并以特定方式进行格式化。Docker 使用 go-templates 来格式化输出。
在本文中,我将首先介绍 Docker inspect 命令的基础知识,然后重点介绍如何根据具体需要格式化输出。
Docker inspect是做什么的
inspect 为你提供了由 docker 管理的所有不同对象的大量元数据。不同对象的信息种类各不相同。例如,如果你检查一个卷,就会得到与创建时间、使用的卷驱动程序、在主机文件系统中的位置、标签等相关的信息;如果您要检查的是一个网络,那么您将获得子网、网关、连接的容器及其 IP 地址、标签和其他信息。为了更好地了解 inspection 为特定对象提供了哪些功能,我建议您运行这些命令,亲自体验一下。
可以检查哪些对象?
在 docker 中,对象或对象类型是由 docker 控制的所有构造。这包括以下内容容器、 镜像、 网络、 卷、 上下文(Context)、 插件、 节点(swarm)、 服务(swarm)、 密匙(swarm)和 配置(swarm)等。
使用 Docker 检查命令
使用inspect命令有两种方法。
1. docker inspect [object] [options]
2. docker [object_type] inspect [object] [options]
你应该一直使用第二种方法。inspect命令提供了格式化的 JSON 输出,稍后我会详细介绍。
创建卷和网络
创建unique卷
docker volume create unique
创建unique网络
docker network create unique
现在,让我们尝试使用第一种语法检查名为 unique 的对象。
docker inspect unique
在我的系统中,如您所见,inspect是检查网络,但如果我打算检查卷呢?
这就是 docker inspect 的问题所在,当你有两个名字相同的不同类型对象时,你不能直接使用 docker inspect [object_name]。要准确地检查你想要的东西,你需要使用对象的 ID,或者使用 --type=[object_type] 选项。使用--type选项后,你可以这样编写上一条命令:--type=[object_type][对象名称]。
docker inspect --type=volume unique
虽然这种方法可行,但我认为没有必要,因为我们已经有了其他语法。你可以直接使用对象特定的子命令,就像我在这里做的那样:
docker volume inspect unique
写起来少,读起来容易得多。