@Kevin, I use a ubuntu image to create a container. But I still get this problem. [root@tfg-104 ~(keystone_admin)]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 0ef2e08ed3fa 2 weeks ago 130 MB kubernetes/pause latest 8d1389d3a249 17 months ago 350.2 kB [root@tfg-104 ~(keystone_admin)]# zun --os-project-name admin list +--------------------------------------+-------+--------------------------+---------+------------+------------+-----------+ | uuid | name | image | status | task_state | addresses | ports | +--------------------------------------+-------+--------------------------+---------+------------+------------+----------- | 1d56794b-624f-4691-aae5-f33b08f55b32 | test3 | ubuntu:latest | Running | None | 172.17.0.2 | [] | +--------------------------------------+-------+--------------------------+---------+------------+------------+----------- [root@tfg-104 ~(keystone_admin)]# zun --os-project-name admin attach test3 ERROR: Not Authorized [root@tfg-104 ~(keystone_admin)]# zun --os-project-name admin --debug attach test3 DEBUG (extension:180) found extension EntryPoint.parse('v2token = keystoneauth1.loading._plugins.identity.v2:Token') DEBUG (extension:180) found extension EntryPoint.parse('v3oauth1 = keystoneauth1.extras.oauth1._loading:V3OAuth1') DEBUG (extension:180) found extension EntryPoint.parse('admin_token = keystoneauth1.loading._plugins.admin_token:AdminToken') DEBUG (extension:180) found extension EntryPoint.parse('v3oidcauthcode = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectAuthorizationCode') DEBUG (extension:180) found extension EntryPoint.parse('v2password = keystoneauth1.loading._plugins.identity.v2:Password') DEBUG (extension:180) found extension EntryPoint.parse('v3samlpassword = keystoneauth1.extras._saml2._loading:Saml2Password') DEBUG (extension:180) found extension EntryPoint.parse('v3password = keystoneauth1.loading._plugins.identity.v3:Password') DEBUG (extension:180) found extension EntryPoint.parse('v3oidcaccesstoken = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectAccessToken') DEBUG (extension:180) found extension EntryPoint.parse('v3oidcpassword = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectPassword') DEBUG (extension:180) found extension EntryPoint.parse('v3kerberos = keystoneauth1.extras.kerberos._loading:Kerberos') DEBUG (extension:180) found extension EntryPoint.parse('token = keystoneauth1.loading._plugins.identity.generic:Token') DEBUG (extension:180) found extension EntryPoint.parse('v3oidcclientcredentials = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectClientCredentials') DEBUG (extension:180) found extension EntryPoint.parse('v3tokenlessauth = keystoneauth1.loading._plugins.identity.v3:TokenlessAuth') DEBUG (extension:180) found extension EntryPoint.parse('v3token = keystoneauth1.loading._plugins.identity.v3:Token') DEBUG (extension:180) found extension EntryPoint.parse('v3totp = keystoneauth1.loading._plugins.identity.v3:TOTP') DEBUG (extension:180) found extension EntryPoint.parse('password = keystoneauth1.loading._plugins.identity.generic:Password') DEBUG (extension:180) found extension EntryPoint.parse('v3fedkerb = keystoneauth1.extras.kerberos._loading:MappedKerberos') DEBUG (extension:180) found extension EntryPoint.parse('password-ceilometer-legacy = ceilometer.keystone_client:LegacyCeilometerKeystoneLoader') DEBUG (session:347) REQ: curl -g -i -X GET http://10.43.166.104:5000/v2.0 -H "Accept: application/json" -H "User-Agent: zun keystoneauth1/2.18.0 python-requests/2.13.0 CPython/2.7.5" DEBUG (connectionpool:207) Starting new HTTP connection (1): 10.43.166.104 DEBUG (connectionpool:395) http://10.43.166.104:5000 "GET /v2.0 HTTP/1.1" 200 339 DEBUG (session:395) RESP: [200] Vary: X-Auth-Token Content-Type: application/json Content-Length: 339 X-Openstack-Request-Id: req-c4a1aaeb-7f96-4452-9c31-b37892820fc0 Date: Tue, 14 Mar 2017 05:22:00 GMT Connection: keep-alive RESP BODY: {"version": {"status": "stable", "updated": "2014-04-17T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v2.0+json"}], "id": "v2.0", "links": [{"href": "http://10.43.166.104:5000/v2.0/", "rel": "self"}, {"href": "http://docs.openstack.org/", "type": "text/html", "rel": "describedby"}]}} DEBUG (session:640) GET call to None for http://10.43.166.104:5000/v2.0 used request id req-c4a1aaeb-7f96-4452-9c31-b37892820fc0 DEBUG (v2:63) Making authentication request to http://10.43.166.104:5000/v2.0/tokens DEBUG (connectionpool:395) http://10.43.166.104:5000 "POST /v2.0/tokens HTTP/1.1" 200 5992 DEBUG (session:347) REQ: curl -g -i -X GET http://10.43.166.104:9512/v1/containers/test3/attach -H "Content-Length: 0" -H "User-Agent: zun keystoneauth1/2.18.0 python-requests/2.13.0 CPython/2.7.5" -H "Content-Type: application/json" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}0012f83738a9e4e6afb2d23ea1ba1e3c4bf17fdd" DEBUG (connectionpool:207) Starting new HTTP connection (1): 10.43.166.104 DEBUG (connectionpool:395) http://10.43.166.104:9512 "GET /v1/containers/test3/attach HTTP/1.1" 200 153 DEBUG (session:395) RESP: [200] Content-Length: 153 Content-Type: application/json X-Openstack-Request-Id: req-de68a7c2-40d7-405a-97fb-f10b10b5ed93 Date: Tue, 14 Mar 2017 05:22:01 GMT Connection: keep-alive RESP BODY: "ws://tfg-104:2375/v1.22/containers/2d13c7f2ab93a77c8070b9a801a0ed30d9919f93b0172f14d3af667b8d38c729/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1" DEBUG (session:640) GET call to container for http://10.43.166.104:9512/v1/containers/test3/attach used request id req-de68a7c2-40d7-405a-97fb-f10b10b5ed93 DEBUG (extension:180) found extension EntryPoint.parse('v2token = keystoneauth1.loading._plugins.identity.v2:Token') DEBUG (extension:180) found extension EntryPoint.parse('v3oauth1 = keystoneauth1.extras.oauth1._loading:V3OAuth1') DEBUG (extension:180) found extension EntryPoint.parse('admin_token = keystoneauth1.loading._plugins.admin_token:AdminToken') DEBUG (extension:180) found extension EntryPoint.parse('v3oidcauthcode = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectAuthorizationCode') DEBUG (extension:180) found extension EntryPoint.parse('v2password = keystoneauth1.loading._plugins.identity.v2:Password') DEBUG (extension:180) found extension EntryPoint.parse('v3samlpassword = keystoneauth1.extras._saml2._loading:Saml2Password') DEBUG (extension:180) found extension EntryPoint.parse('v3password = keystoneauth1.loading._plugins.identity.v3:Password') DEBUG (extension:180) found extension EntryPoint.parse('v3oidcaccesstoken = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectAccessToken') DEBUG (extension:180) found extension EntryPoint.parse('v3oidcpassword = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectPassword') DEBUG (extension:180) found extension EntryPoint.parse('v3kerberos = keystoneauth1.extras.kerberos._loading:Kerberos') DEBUG (extension:180) found extension EntryPoint.parse('token = keystoneauth1.loading._plugins.identity.generic:Token') DEBUG (extension:180) found extension EntryPoint.parse('v3oidcclientcredentials = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectClientCredentials') DEBUG (extension:180) found extension EntryPoint.parse('v3tokenlessauth = keystoneauth1.loading._plugins.identity.v3:TokenlessAuth') DEBUG (extension:180) found extension EntryPoint.parse('v3token = keystoneauth1.loading._plugins.identity.v3:Token') DEBUG (extension:180) found extension EntryPoint.parse('v3totp = keystoneauth1.loading._plugins.identity.v3:TOTP') DEBUG (extension:180) found extension EntryPoint.parse('password = keystoneauth1.loading._plugins.identity.generic:Password') DEBUG (extension:180) found extension EntryPoint.parse('v3fedkerb = keystoneauth1.extras.kerberos._loading:MappedKerberos') DEBUG (extension:180) found extension EntryPoint.parse('password-ceilometer-legacy = ceilometer.keystone_client:LegacyCeilometerKeystoneLoader') DEBUG (session:347) REQ: curl -g -i -X GET http://10.43.166.104:5000/v2.0 -H "Accept: application/json" -H "User-Agent: zun keystoneauth1/2.18.0 python-requests/2.13.0 CPython/2.7.5" DEBUG (connectionpool:207) Starting new HTTP connection (1): 10.43.166.104 DEBUG (connectionpool:395) http://10.43.166.104:5000 "GET /v2.0 HTTP/1.1" 200 339 DEBUG (session:395) RESP: [200] Vary: X-Auth-Token Content-Type: application/json Content-Length: 339 X-Openstack-Request-Id: req-94a78bbe-0187-45a4-a7f3-f160d46e3dff Date: Tue, 14 Mar 2017 05:22:01 GMT Connection: keep-alive RESP BODY: {"version": {"status": "stable", "updated": "2014-04-17T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v2.0+json"}], "id": "v2.0", "links": [{"href": "http://10.43.166.104:5000/v2.0/", "rel": "self"}, {"href": "http://docs.openstack.org/", "type": "text/html", "rel": "describedby"}]}} DEBUG (session:640) GET call to None for http://10.43.166.104:5000/v2.0 used request id req-94a78bbe-0187-45a4-a7f3-f160d46e3dff DEBUG (v2:63) Making authentication request to http://10.43.166.104:5000/v2.0/tokens DEBUG (connectionpool:395) http://10.43.166.104:5000 "POST /v2.0/tokens HTTP/1.1" 200 371 DEBUG (shell:637) Not Authorized Traceback (most recent call last): File "/home/fengshq/zuncode/python-zunclient/zunclient/shell.py", line 635, in main map(encodeutils.safe_decode, sys.argv[1:])) File "/home/fengshq/zuncode/python-zunclient/zunclient/shell.py", line 576, in main return args.func(self.cs, args) File "/home/fengshq/zuncode/python-zunclient/zunclient/v1/containers_shell.py", line 533, in do_attach _websocket_attach(response, args.container, "~", 0.5) File "/home/fengshq/zuncode/python-zunclient/zunclient/v1/containers_shell.py", line 57, in _websocket_attach wscls.init_httpclient() File "/home/fengshq/zuncode/python-zunclient/zunclient/common/websocketclient/websocketclient.py", line 93, in init_httpclient insecure=insecure) File "/home/fengshq/zuncode/python-zunclient/zunclient/v1/client.py", line 102, in __init__ raise RuntimeError("Not Authorized") RuntimeError: Not Authorized ERROR: Not Authorized [root@tfg-104 ~(keystone_admin)]# pip list |grep websocket websocket-client (0.40.0)