From 521be57e78b1f957b6f4754cd679a1b7abc8aaf0 Mon Sep 17 00:00:00 2001 From: Benjamin Schulz Date: Thu, 25 Jan 2024 16:50:19 +0100 Subject: [PATCH 1/3] Update installation command --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7e515a5..c9f0948 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Installation ------------ * Binaries: [On the releases page](https://github.com/Shimmur/shipspotter/releases) - * From Source: `go get github.com/Shimmur/shipspotter` + * From Source: `go install github.com/Shimmur/shipspotter@latest` Basic Usage ----------- From eb0875dc8d045f052839bb011f8da147ffe822ca Mon Sep 17 00:00:00 2001 From: Benjamin Schulz Date: Thu, 25 Jan 2024 16:51:09 +0100 Subject: [PATCH 2/3] If container ip is empty try a fallback search in network settings. Fail if this also results in empty ip --- main.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 0ff4cfc..9b416bd 100644 --- a/main.go +++ b/main.go @@ -150,13 +150,34 @@ func findContainerByID(client *docker.Client, id string) (*docker.APIContainers, return nil, fmt.Errorf("Unable to match container ID: %s", id) } +// fallback if findIPForContainer's container.NetworkSettings.IPAddress is empty +func findIPInNetworks(networks map[string]docker.ContainerNetwork) (string, error) { + var ip string + for _, network := range networks { + ip = network.IPAddress + } + if ip == "" { + return "", fmt.Errorf("Unable to find Container IP in NetworkSettings") + } + return ip, nil +} + func findIPForContainer(client *docker.Client, cntnr *docker.APIContainers) (string, error) { container, err := client.InspectContainer(cntnr.ID) if err != nil { return "", fmt.Errorf("Unable to inspect container: %s", err) } - ip := container.NetworkSettings.IPAddress + var ip string + if container.NetworkSettings.IPAddress == "" { + ipFromNetworkSettings, err := findIPInNetworks(container.NetworkSettings.Networks) + if err != nil { + log.Fatal(err) + } + ip = ipFromNetworkSettings + } else { + ip = container.NetworkSettings.IPAddress + } log.Infof("Container IP address: %s", ip) return ip, nil From b23998dd2ba64e8c5155cd0ca723f5ba4fbf9db3 Mon Sep 17 00:00:00 2001 From: Benjamin Schulz Date: Thu, 25 Jan 2024 17:13:52 +0100 Subject: [PATCH 3/3] Refactoring --- main.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 9b416bd..05d5fe9 100644 --- a/main.go +++ b/main.go @@ -170,11 +170,11 @@ func findIPForContainer(client *docker.Client, cntnr *docker.APIContainers) (str var ip string if container.NetworkSettings.IPAddress == "" { - ipFromNetworkSettings, err := findIPInNetworks(container.NetworkSettings.Networks) + ipFromNetworks, err := findIPInNetworks(container.NetworkSettings.Networks) if err != nil { log.Fatal(err) } - ip = ipFromNetworkSettings + ip = ipFromNetworks } else { ip = container.NetworkSettings.IPAddress }