我尝试使用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
是其中一个群集节点,然后我连接到该特定容器的网关桥接地址(172.18.0.4
)。
为了提供一些自动化,我希望能够inspect
任何泊坞对象来映射容器' ID为其网桥IP。我想创建一个类似的映射:
{
container_id: {
swarm_node: <Swarm node IP>,
bridge_ip: <Container's bridge IP>
}
}
但是,我看不到任何显示特定容器的桥接信息的结构。我总是exec
进入一个给定的容器并运行ifconfig
,但我希望避免这种情况。
任何指示赞赏!
答案 0 :(得分:1)
尝试从这开始:
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。我还对#ing; ingress&#34;的排除进行了硬编码,不确定是否有更清洁的方式。
要将节点ID映射到IP地址,可以使用另一个地址:
docker node ls -q \
| xargs docker node inspect -f '{ {{.ID}}: {{.Status.Addr}} }'