如何确定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}} }'