diff --git a/doc/source/command-objects/volume.rst b/doc/source/command-objects/volume.rst
index bf89dc44e0..f51b5ae19d 100644
--- a/doc/source/command-objects/volume.rst
+++ b/doc/source/command-objects/volume.rst
@@ -164,6 +164,7 @@ Set volume properties
         [--description <description>]
         [--size <size>]
         [--property <key=value> [...] ]
+        [--image-property <key=value> [...] ]
         <volume>
 
 .. option:: --name <name>
@@ -182,6 +183,13 @@ Set volume properties
 
     Property to add or modify for this volume (repeat option to set multiple properties)
 
+.. option:: --image-property <key=value>
+
+    To add or modify image properties for this volume.
+    (repeat option to set multiple image properties)
+
+    *Volume version 2 only*
+
 .. describe:: <volume>
 
     Volume to modify (name or ID)
diff --git a/openstackclient/tests/volume/v2/test_volume.py b/openstackclient/tests/volume/v2/test_volume.py
index a836f79ec6..29fc391ee9 100644
--- a/openstackclient/tests/volume/v2/test_volume.py
+++ b/openstackclient/tests/volume/v2/test_volume.py
@@ -753,3 +753,33 @@ class TestVolumeShow(TestVolume):
 
         self.assertEqual(volume_fakes.VOLUME_columns, columns)
         self.assertEqual(volume_fakes.VOLUME_data, data)
+
+
+class TestVolumeSet(TestVolume):
+
+    def setUp(self):
+        super(TestVolumeSet, self).setUp()
+
+        self.new_volume = volume_fakes.FakeVolume.create_one_volume()
+        self.volumes_mock.create.return_value = self.new_volume
+
+        # Get the command object to test
+        self.cmd = volume.SetVolume(self.app, None)
+
+    def test_volume_set_image_property(self):
+        arglist = [
+            '--image-property', 'Alpha=a',
+            '--image-property', 'Beta=b',
+            self.new_volume.id,
+        ]
+        verifylist = [
+            ('image_property', {'Alpha': 'a', 'Beta': 'b'}),
+            ('volume', self.new_volume.id),
+        ]
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        # In base command class ShowOne in cliff, abstract method take_action()
+        # returns nothing
+        self.cmd.take_action(parsed_args)
+        self.volumes_mock.set_image_metadata.assert_called_with(
+            self.volumes_mock.get().id, parsed_args.image_property)
diff --git a/openstackclient/volume/v2/volume.py b/openstackclient/volume/v2/volume.py
index 8f2122eb83..9b58d73daf 100644
--- a/openstackclient/volume/v2/volume.py
+++ b/openstackclient/volume/v2/volume.py
@@ -345,6 +345,13 @@ class SetVolume(command.Command):
             help='Property to add or modify for this volume '
                  '(repeat option to set multiple properties)',
         )
+        parser.add_argument(
+            '--image-property',
+            metavar='<key=value>',
+            action=parseractions.KeyValueAction,
+            help='To add or modify image properties for this volume '
+                 '(repeat option to set multiple image properties)',
+        )
         return parser
 
     def take_action(self, parsed_args):
@@ -365,6 +372,9 @@ class SetVolume(command.Command):
 
         if parsed_args.property:
             volume_client.volumes.set_metadata(volume.id, parsed_args.property)
+        if parsed_args.image_property:
+            volume_client.volumes.set_image_metadata(
+                volume.id, parsed_args.image_property)
 
         kwargs = {}
         if parsed_args.name:
@@ -374,7 +384,8 @@ class SetVolume(command.Command):
         if kwargs:
             volume_client.volumes.update(volume.id, **kwargs)
 
-        if not kwargs and not parsed_args.property and not parsed_args.size:
+        if (not kwargs and not parsed_args.property
+           and not parsed_args.image_property and not parsed_args.size):
             self.app.log.error("No changes requested\n")
 
 
diff --git a/releasenotes/notes/image-property_add-7f8479791eab45b7.yaml b/releasenotes/notes/image-property_add-7f8479791eab45b7.yaml
new file mode 100644
index 0000000000..724da45159
--- /dev/null
+++ b/releasenotes/notes/image-property_add-7f8479791eab45b7.yaml
@@ -0,0 +1,14 @@
+---
+fixes:
+  - |
+    Added support for setting volume image property.
+
+    Image properties are copied from image when volume is created.
+    But since a volume is mutable, user sometime wants to update
+    image properties for volume.
+
+    So, this fix enables user to update image properties of volume
+    using below command:
+    ``volume set --image-property <key=value> <volume>``.
+
+    [Bug 'https://bugs.launchpad.net/python-openstackclient/+bug/1554877'_]