Skip to content

Commit 4857050

Browse files
buchdaganlorn
andcommitted
fix: empty adresses with docker internal networks
Co-authored-by: Nicolas Duchon <nicolas.duchon@gmail.com> Co-authored-by: Anton Tinyakov <anlorn@anlorn.com>
1 parent 3e80765 commit 4857050

File tree

3 files changed

+54
-25
lines changed

3 files changed

+54
-25
lines changed

internal/context/address.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package context
2+
3+
import (
4+
docker "github.com/fsouza/go-dockerclient"
5+
)
6+
7+
type Address struct {
8+
IP string
9+
IP6LinkLocal string
10+
IP6Global string
11+
Port string
12+
HostPort string
13+
Proto string
14+
HostIP string
15+
}
16+
17+
func renderAddress(container *docker.Container, port docker.Port) Address {
18+
return Address{
19+
IP: container.NetworkSettings.IPAddress,
20+
IP6LinkLocal: container.NetworkSettings.LinkLocalIPv6Address,
21+
IP6Global: container.NetworkSettings.GlobalIPv6Address,
22+
Port: port.Port(),
23+
Proto: port.Proto(),
24+
}
25+
}
26+
27+
func GetContainerAddresses(container *docker.Container) []Address {
28+
addresses := []Address{}
29+
30+
for port, bindings := range container.NetworkSettings.Ports {
31+
address := renderAddress(container, port)
32+
33+
if len(bindings) > 0 {
34+
address.HostPort = bindings[0].HostPort
35+
address.HostIP = bindings[0].HostIP
36+
}
37+
38+
addresses = append(addresses, address)
39+
}
40+
41+
if len(addresses) == 0 {
42+
// internal docker network has empty 'container.NetworkSettings.Ports'
43+
for port := range container.Config.ExposedPorts {
44+
address := renderAddress(container, port)
45+
addresses = append(addresses, address)
46+
}
47+
}
48+
49+
return addresses
50+
}

internal/context/context.go

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,6 @@ func SetDockerEnv(d *docker.Env) {
5252
dockerEnv = d
5353
}
5454

55-
type Address struct {
56-
IP string
57-
IP6LinkLocal string
58-
IP6Global string
59-
Port string
60-
HostPort string
61-
Proto string
62-
HostIP string
63-
}
64-
6555
type Network struct {
6656
IP string
6757
Name string

internal/generator/generator.go

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -420,22 +420,10 @@ func (g *generator) getContainers() ([]*context.RuntimeContainer, error) {
420420
IP6LinkLocal: container.NetworkSettings.LinkLocalIPv6Address,
421421
IP6Global: container.NetworkSettings.GlobalIPv6Address,
422422
}
423-
for k, v := range container.NetworkSettings.Ports {
424-
address := context.Address{
425-
IP: container.NetworkSettings.IPAddress,
426-
IP6LinkLocal: container.NetworkSettings.LinkLocalIPv6Address,
427-
IP6Global: container.NetworkSettings.GlobalIPv6Address,
428-
Port: k.Port(),
429-
Proto: k.Proto(),
430-
}
431-
if len(v) > 0 {
432-
address.HostPort = v[0].HostPort
433-
address.HostIP = v[0].HostIP
434-
}
435-
runtimeContainer.Addresses = append(runtimeContainer.Addresses,
436-
address)
437423

438-
}
424+
adresses := context.GetContainerAddresses(container)
425+
runtimeContainer.Addresses = append(runtimeContainer.Addresses, adresses...)
426+
439427
for k, v := range container.NetworkSettings.Networks {
440428
network := context.Network{
441429
IP: v.IPAddress,
@@ -453,6 +441,7 @@ func (g *generator) getContainers() ([]*context.RuntimeContainer, error) {
453441
runtimeContainer.Networks = append(runtimeContainer.Networks,
454442
network)
455443
}
444+
456445
for k, v := range container.Volumes {
457446
runtimeContainer.Volumes[k] = context.Volume{
458447
Path: k,

0 commit comments

Comments
 (0)