feat: allow to bind to multiple host IP addresses specified as CIDR prefix in x-ports (#358)

Signed-off-by: Miek Gieben <miek@miek.nl>
Co-authored-by: Pasha Sviderski <me@psviderski.name>
This commit is contained in:
Miek Gieben
2026-06-04 20:07:58 +10:00
committed by GitHub
co-authored by Pasha Sviderski
parent 3586a32987
commit 1247f961c2
11 changed files with 312 additions and 76 deletions
+17
View File
@@ -620,7 +620,24 @@ func (s *Server) CreateServiceContainer(
if p.HostIP.IsValid() {
portBindings[port][0].HostIP = p.HostIP.String()
}
if p.HostPrefix.IsValid() {
addrs, err := addrOfPrefix(p.HostPrefix)
if err != nil {
return nil, err
}
// p.HostIP was not valid, so the first IP can be set in the above added PortBindings, the rest is
// just appended.
portBindings[port][0].HostIP = addrs[0]
for _, addr := range addrs[1:] {
portBindings[port] = append(portBindings[port], nat.PortBinding{
HostPort: strconv.Itoa(int(p.PublishedPort)),
HostIP: addr,
})
}
}
}
hostConfig := &container.HostConfig{
CapAdd: spec.Container.CapAdd,
CapDrop: spec.Container.CapDrop,