如何确定docker swarm容器的网桥IP
我正在尝试使用如何确定docker swarm容器的网桥IP,docker,docker-swarm,Docker,Docker Swarm,我正在尝试使用dockerswarm建立一个框架,在这个框架中,我可以从外部系统(通过ssh或其他方式)连接到特定服务的容器中。因此,我可以通过以下方式来实现: ssh -o ProxyCommand="ssh ubuntu@10.0.0.18 nc 172.18.0.4 22" -l root foo { container_id: { swarm_node: <Swarm node IP>, bridge_ip: <Container's brid
dockerswarm
建立一个框架,在这个框架中,我可以从外部系统(通过ssh或其他方式)连接到特定服务的容器中。因此,我可以通过以下方式来实现:
ssh -o ProxyCommand="ssh ubuntu@10.0.0.18 nc 172.18.0.4 22" -l root foo
{
container_id: {
swarm_node: <Swarm node IP>,
bridge_ip: <Container's bridge IP>
}
}
这里10.0.0.18
是swarm节点之一,然后我连接到该特定容器的网关网桥地址(172.18.0.4
)
为了提供一些自动化,我希望能够检查
任何docker对象,以便将容器ID映射到其网桥IP。我想创建以下内容的映射:
ssh -o ProxyCommand="ssh ubuntu@10.0.0.18 nc 172.18.0.4 22" -l root foo
{
container_id: {
swarm_node: <Swarm node IP>,
bridge_ip: <Container's bridge IP>
}
}
{
货柜编号:{
群集节点:,
网桥ip:尝试从以下内容开始:
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}} }'
谢谢,但是在我的设置中,网桥ip
显示了覆盖ip。至少在“标准”设置中,我无法从swarm节点连接到此ip。@JensD尝试使用带有swarm服务的本地网桥网络目前仅部分受支持。您最好使用可连接的覆盖网络。有关更多信息,请参阅详细信息。如果您要获取容器的网桥IP地址,我认为您需要从本地节点上的容器中获取该地址。稍微更改了脚本,以便在swarm集群中有多个节点时,它可以工作。对于$中的节点(docker服务ls-q);do docker service ps-f desired state=running-q$node\|同时读取任务id;docker inspect-f{{printf'%.12s.Status.ContainerStatus.ContainerID}:{swarm_节点:{.NodeID},网桥ip:{range.NetworksAttachments}{{{if ne“ingress.Network Spec Name}{{.Addresses}}{end}}{}'$task\u id done done