问题描述
我创建了一个简单的桥接网络并附加了几个容器。
如果我发出 docker network inspect webservers
命令,我会得到很多输出,我想过滤掉大部分。
例如,我想检查每个现有容器的 IPv4Address 值。示例 json 块如下所示:
"Containers": {
"2868125fa1f1b97fd765f7d6bd61d1d8eff3e9cb16ea6c3d5625ce1d331932b9": {
"Name": "tomcat","EndpointID": "36d35901e11d4b5be5336aa90e5161eca82c3a24f3661901461f3bfed2b2a2d3","MacAddress": "02:42:ac:14:00:03","IPv4Address": "172.20.0.3/16","IPv6Address": ""
},
所以我试图通过使用“.Containers.IPv4Address
”来提取 IP 地址信息,但输出“没有价值”:
kamo@uBox:~$ docker inspect -f '{{ .Containers.IPv4Address }}' webservers
<no value>
kamo@uBox:~$
我还尝试了一个带有“range
”参数的东西:
docker inspect -f '{{ range .Containers.IPv4Address }} {{ .IPv4Address }} {{ end }}' webservers
但它没有产生任何输出。
那么如何使用 --format
参数提取 IPv4Address 信息?
如果我想从每个容器中提取 2 个值 - “名称”和“IPv4Address”怎么办?
解决方法
为了按照您尝试的方式实现它,因为您有一个容器列表,您必须使用 rangem 在网络中检查输出的容器列表上进行迭代。
你可以这样实现:
docker network inspect webservers -f '{{ range.Containers}}{{.IPv4Address}}{{end}}'
但是如果您尝试获取容器的所有 IPv4Addresses,请尝试使用以下命令:
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
祝你好运:)
,没关系 Go 模板,我会用 awk 代替:
kamo@ubox:~$ docker inspect webservers | awk '/Containers/,/Options/'
"Containers": {
"2868125fa1f1b97fd765f7d6bd61d1d8eff3e9cb16ea6c3d5625ce1d331932b9": {
"Name": "tomcat","EndpointID": "36d35901e11d4b5be5336aa90e5161eca82c3a24f3661901461f3bfed2b2a2d3","MacAddress": "02:42:ac:14:00:03","IPv4Address": "172.20.0.3/16","IPv6Address": ""
},"aab8df61e3763ae4a4f8a17235a98c20eb67c0ee22526eb4d2091beed358d30b": {
"Name": "redis","EndpointID": "f64c8601a38bcba7d9446105efc6827b0c744f5954ff2cabc860fe9cabdfea7e","MacAddress": "02:42:ac:14:00:02","IPv4Address": "172.20.0.2/16","IPv6Address": ""
}
},"Options": {},kamo@ubox:~$