diff --git a/glanceclient/shell.py b/glanceclient/shell.py
index e0124e5c..7931a1a3 100644
--- a/glanceclient/shell.py
+++ b/glanceclient/shell.py
@@ -23,6 +23,7 @@ import re
 import sys
 
 from keystoneclient.v2_0 import client as ksclient
+import netaddr
 
 import glanceclient
 from glanceclient import exc
@@ -347,6 +348,9 @@ class OpenStackImagesShell(object):
         if args.os_image_url:
             return args.os_image_url
         elif args.host:
+            # Check if it is legal ipv6 address, if so, need wrap it with '[]'
+            if netaddr.valid_ipv6(args.host):
+                args.host = '[%s]' % args.host
             scheme = 'https' if args.use_ssl else 'http'
             return '%s://%s:%s/' % (scheme, args.host, args.port)
         else:
diff --git a/tests/test_shell.py b/tests/test_shell.py
index a895c2db..91793b25 100644
--- a/tests/test_shell.py
+++ b/tests/test_shell.py
@@ -80,3 +80,14 @@ class ShellTest(utils.TestCase):
             add_help=False,
             formatter_class=openstack_shell.HelpFormatter,)
         self.assertTrue(expected, actual_parser)
+
+    def test_get_image_url_by_ipv6Addr_host(self):
+        fake_args = lambda: None
+        setattr(fake_args, 'os_image_url', None)
+        setattr(fake_args, 'host', '2011:2013:1:f101::1')
+        setattr(fake_args, 'use_ssl', True)
+        setattr(fake_args, 'port', '9292')
+        expected_image_url = 'https://[2011:2013:1:f101::1]:9292/'
+        test_shell = openstack_shell.OpenStackImagesShell()
+        targeted_image_url = test_shell._get_image_url(fake_args)
+        self.assertEqual(expected_image_url, targeted_image_url)