From 9eeab37e32d3c74914debab5b8e63ac79d015d56 Mon Sep 17 00:00:00 2001 From: Alex Mirski-Fitton Date: Mon, 6 Sep 2021 17:29:58 +0100 Subject: [PATCH] Handle window between cont. start & port binding --- test/docker/docker_api_test_util.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/test/docker/docker_api_test_util.go b/test/docker/docker_api_test_util.go index 597d155..7814212 100644 --- a/test/docker/docker_api_test_util.go +++ b/test/docker/docker_api_test_util.go @@ -798,12 +798,23 @@ func copyFromContainer(t *testing.T, cli *client.Client, id string, file string) } func getPort(t *testing.T, cli *client.Client, ID string, port int) string { - i, err := cli.ContainerInspect(context.Background(), ID) - if err != nil { - t.Fatal(err) + var inspectInfo types.ContainerJSON + var err error + for attemptsRemaining := 3; attemptsRemaining > 0; attemptsRemaining-- { + inspectInfo, err = cli.ContainerInspect(context.Background(), ID) + if err != nil { + t.Fatal(err) + } + portNat := nat.Port(fmt.Sprintf("%d/tcp", port)) + if inspectInfo.NetworkSettings.Ports[portNat] == nil || len(inspectInfo.NetworkSettings.Ports[portNat]) == 0 { + t.Log("Container port not yet bound") + time.Sleep(1 * time.Second) + continue + } + return inspectInfo.NetworkSettings.Ports[portNat][0].HostPort } - portNat := nat.Port(fmt.Sprintf("%d/tcp", port)) - return i.NetworkSettings.Ports[portNat][0].HostPort + t.Fatal("Failed to get port") + return "" } func countLines(t *testing.T, r io.Reader) int {