From ef628b4e2a8a6caab198870ca504a7014226f48d Mon Sep 17 00:00:00 2001 From: Phil Winder Date: Fri, 23 Sep 2016 15:29:04 +0100 Subject: [PATCH] Add wait for container to start to get ip address method for stability. --- test/util/Docker.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/util/Docker.py b/test/util/Docker.py index 7711ba0..0828f9b 100644 --- a/test/util/Docker.py +++ b/test/util/Docker.py @@ -1,6 +1,7 @@ import re from subprocess import Popen, PIPE from random import random +import time # From http://blog.bordage.pro/avoid-docker-py/ class Docker: @@ -20,6 +21,7 @@ def random_container_name(self, prefix): return retstr def get_container_ip(self, ctr_name): + self.waitForContainerToStart(ctr_name) command = ['docker', 'inspect', '--format', '\'{{.NetworkSettings.IPAddress}}\'', ctr_name] @@ -37,3 +39,13 @@ def execute(self, command, dump_streams=False): def start_container(self, container_name="", image="", cmd="", host=""): command = ['docker', 'run', '-d', '-h', host, '--name', container_name, image] self.execute(command) + + def waitForContainerToStart(self, ctr_name): + command = ['docker', 'inspect', + '--format', '\'{{.State.Status}}\'', + ctr_name] + status = re.sub(r'[^a-z]*', '', self.execute(command)) + while status != "running": + time.sleep(1) + print("Status: " + status + ". Waiting for container to start.") + status = re.sub(r'[^a-z]*', '', self.execute(command))