如何确定docker集装箱的桥梁IP
我试图build立一个框架,使用docker swarm
,我可以从外部系统(通过SSH或其他)连接到特定服务的容器。 所以,我可以用这样的东西来做到这一点:
ssh -o ProxyCommand="ssh ubuntu@10.0.0.18 nc 172.18.0.4 22" -l root foo
这里10.0.0.18
是swarm节点之一,然后我连接到特定容器的网关网桥地址( 172.18.0.4
)。
为了提供一些自动化,我希望能够inspect
任何docker对象,以便将容器的ID映射到它的网桥IP。 我想创build一个类似的映射:
{ container_id: { swarm_node: <Swarm node IP>, bridge_ip: <Container's bridge IP> } }
但是,我看不到任何types的结构显示特定容器的桥梁信息。 我总是可以exec
到一个给定的容器并运行ifconfig
但我希望避免这种情况。
任何指针赞赏!
尝试从这开始:
docker service ls -q \ | xargs docker service ps -f desired-state=running -q \ | while read task_id; do docker inspect -f '{{printf "%.12s" .Status.ContainerStatus.ContainerID }}: { swarm_node: {{.NodeID}}, bridge_ip: {{range .NetworksAttachments}}{{if ne "ingress" .Network.Spec.Name }}{{.Addresses}}{{end}}{{end}} }' $task_id done
你可能需要清理一下容器的IP地址,因为它是以包含位长度的IP列表出来的。 并且swarm节点实际上是节点id,而不是节点IP。 我也硬编码排除“入口”,不知道是否有一个更清洁的方式。
要将节点ID映射到IP地址,可以使用另一个:
docker node ls -q \ | xargs docker node inspect -f '{ {{.ID}}: {{.Status.Addr}} }'