diff --git a/compose/config/serialize.py b/compose/config/serialize.py
index ccddbf532..8cb8a2808 100644
--- a/compose/config/serialize.py
+++ b/compose/config/serialize.py
@@ -78,7 +78,7 @@ def denormalize_config(config, image_digests=None):
                         config.version >= V3_0 and config.version < v3_introduced_name_key(key)):
                     del conf['name']
                 elif 'external' in conf:
-                    conf['external'] = True
+                    conf['external'] = bool(conf['external'])
 
             if 'attachable' in conf and config.version < V3_2:
                 # For compatibility mode, this option is invalid in v2
diff --git a/tests/unit/config/config_test.py b/tests/unit/config/config_test.py
index 085a2d010..08b92a573 100644
--- a/tests/unit/config/config_test.py
+++ b/tests/unit/config/config_test.py
@@ -5096,3 +5096,19 @@ class SerializeTest(unittest.TestCase):
         serialized_config = yaml.load(serialize_config(config_dict))
         serialized_service = serialized_config['services']['web']
         assert serialized_service['command'] == 'echo 十六夜 咲夜'
+
+    def test_serialize_external_false(self):
+        cfg = {
+            'version': '3.4',
+            'volumes': {
+                'test': {
+                    'name': 'test-false',
+                    'external': False
+                }
+            }
+        }
+
+        config_dict = config.load(build_config_details(cfg))
+        serialized_config = yaml.load(serialize_config(config_dict))
+        serialized_volume = serialized_config['volumes']['test']
+        assert serialized_volume['external'] is False