From 9db5ac8e450a25a7bda081381516be32f8497a1f Mon Sep 17 00:00:00 2001 From: Sam Yaple Date: Tue, 13 Oct 2015 10:24:36 +0000 Subject: [PATCH 1/2] Don't assume ExposedPorts exists (bug #2257) A recent change [1] in docker between v1.8.2 and v1.8.3 changed what is returned in the json when inspecting an image. Five variables which could have been expected before will now be omited when empty. Only one of those variables is being addressed in the docker, ExposedPorts. Unfortunately there was also no API version change on this so this can't be easily corrected with pinning the API to the older version. This does a get() which will return None if the variable is not in the dict formed from the json that was returned. Everything else works the same way. [1] https://github.com/docker/docker/commit/9098628b2901ae8585ba4c66ee6e14759d2119da --- cloud/docker/docker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloud/docker/docker.py b/cloud/docker/docker.py index 4df808fec2d..3a2f8fe9e31 100644 --- a/cloud/docker/docker.py +++ b/cloud/docker/docker.py @@ -1062,7 +1062,7 @@ class DockerManager(object): continue # EXPOSED PORTS - expected_exposed_ports = set((image['ContainerConfig']['ExposedPorts'] or {}).keys()) + expected_exposed_ports = set((image['ContainerConfig'].get('ExposedPorts') or {}).keys()) for p in (self.exposed_ports or []): expected_exposed_ports.add("/".join(p)) From f15d285514b7d5ba4e8da2579b7fc2a7ed73b72f Mon Sep 17 00:00:00 2001 From: Sam Yaple Date: Tue, 13 Oct 2015 10:34:08 +0000 Subject: [PATCH 2/2] Catch the second occurance of ExposedPorts as well --- cloud/docker/docker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloud/docker/docker.py b/cloud/docker/docker.py index 3a2f8fe9e31..faf6e05c470 100644 --- a/cloud/docker/docker.py +++ b/cloud/docker/docker.py @@ -1066,7 +1066,7 @@ class DockerManager(object): for p in (self.exposed_ports or []): expected_exposed_ports.add("/".join(p)) - actually_exposed_ports = set((container["Config"]["ExposedPorts"] or {}).keys()) + actually_exposed_ports = set((container["Config"].get("ExposedPorts") or {}).keys()) if actually_exposed_ports != expected_exposed_ports: self.reload_reasons.append('exposed_ports ({0} => {1})'.format(actually_exposed_ports, expected_exposed_ports))