Переглянути джерело

Merge pull request #5845 from docker/5253-port-serialize

Fix port serialization with external IP
Joffrey F 7 роки тому
батько
коміт
2975f06ca2
2 змінених файлів з 15 додано та 2 видалено
  1. 3 2
      compose/config/serialize.py
  2. 12 0
      tests/unit/config/config_test.py

+ 3 - 2
compose/config/serialize.py

@@ -151,9 +151,10 @@ def denormalize_service_dict(service_dict, version, image_digest=None):
             service_dict['healthcheck']['start_period'] = serialize_ns_time_value(
                 service_dict['healthcheck']['start_period']
             )
-    if 'ports' in service_dict and version < V3_2:
+
+    if 'ports' in service_dict:
         service_dict['ports'] = [
-            p.legacy_repr() if isinstance(p, types.ServicePort) else p
+            p.legacy_repr() if p.external_ip or version < V3_2 else p
             for p in service_dict['ports']
         ]
     if 'volumes' in service_dict and (version < V2_3 or (version > V3_0 and version < V3_2)):

+ 12 - 0
tests/unit/config/config_test.py

@@ -4943,6 +4943,18 @@ class SerializeTest(unittest.TestCase):
         serialized_config = yaml.load(serialize_config(config_dict))
         assert '8080:80/tcp' in serialized_config['services']['web']['ports']
 
+    def test_serialize_ports_with_ext_ip(self):
+        config_dict = config.Config(version=V3_5, services=[
+            {
+                'ports': [types.ServicePort('80', '8080', None, None, '127.0.0.1')],
+                'image': 'alpine',
+                'name': 'web'
+            }
+        ], volumes={}, networks={}, secrets={}, configs={})
+
+        serialized_config = yaml.load(serialize_config(config_dict))
+        assert '127.0.0.1:8080:80/tcp' in serialized_config['services']['web']['ports']
+
     def test_serialize_configs(self):
         service_dict = {
             'image': 'example/web',