2016-09-26 56 views
2

我使用Docker-pydockerpty以便exec命令使用Docker Python API。Python - 在Docker客戶端連接中的tlsv1警報協議版本錯誤

這是很簡單的代碼:

container = client.inspect_container(containerId)[0] 
dockerpty.exec_command(client, container, command) 

當我想如echo 'hello'它工作正常執行命令。然而,命令,如/bin/bash,即使我能夠得到的終端,它導致了以下錯誤:

ubuntu:test$ python main.py exec [containerid] /bin/bash 
[email protected]:/opt/apache# Traceback (most recent call last): 
    File "__main__.py", line 216, in <module> 
    main() 
    File "__main__.py", line 201, in main 
    ec.execute() 
    dockerpty.exec_command(client, container, command) 
    File "/usr/local/lib/python2.7/site-packages/dockerpty/__init__.py", line 44, in exec_command 
    PseudoTerminal(client, operation).start() 
    File "/usr/local/lib/python2.7/site-packages/dockerpty/pty.py", line 334, in start 
    self._hijack_tty(pumps) 
    File "/usr/local/lib/python2.7/site-packages/dockerpty/pty.py", line 373, in _hijack_tty 
    pump.flush() 
    File "/usr/local/lib/python2.7/site-packages/dockerpty/io.py", line 367, in flush 
    read = self.from_stream.read(n) 
    File "/usr/local/lib/python2.7/site-packages/dockerpty/io.py", line 120, in read 
    return self.fd.recv(n) 
    File "/usr/local/lib/python2.7/site-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 194, in recv 
    data = self.connection.recv(*args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/OpenSSL/SSL.py", line 1302, in recv 
    self._raise_ssl_error(self._ssl, result) 
    File "/usr/local/lib/python2.7/site-packages/OpenSSL/SSL.py", line 1172, in _raise_ssl_error 
    _raise_current_error() 
    File "/usr/local/lib/python2.7/site-packages/OpenSSL/_util.py", line 48, in exception_from_error_queue 
    raise exception_type(errors) 
OpenSSL.SSL.Error: [('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert protocol version')] 

當我創建客戶端,我指定的tls_config使用tlsv1.2

tls_config = docker.tls.TLSConfig(
     client_cert=(cert, key), 
     ssl_version=ssl.PROTOCOL_TLSv1_2, 
    ) 
    client = docker.Client(base_url=url, timeout=timeout, 
          tls=tls_config, user_agent=user_agent) 

爲什麼我得到這個'tlsv1 alert protocol version'錯誤,我該如何解決這個問題?

回答

1

在一些舊版本的Python中,ssl.PROTOCOL_TLSv1_2不可用。您可以輕鬆地試圖從Python控制檯將其導入容器內部檢查:

[email protected]:/# python 
Python 2.7.8 (default, Nov 26 2014, 22:28:51) 
>>> import ssl 
>>> ssl.PROTOCOL_TLSv1_2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'PROTOCOL_TLSv1_2' 
>>> ssl.PROTOCOL_TLSv1 
3 

如果是這樣的情況下,嘗試在泊塢窗圖像更新Python來>=2.7.9

另外請確保openssl版本> = 1.0.1

+0

兩個答案是肯定的: '根@ SO1:/#蟒蛇 的Python 2.7.9(默認情況下,2016年6月29日,13時08分31秒) [GCC 4.9.2]上linux2上 鍵入「help 「,」版權「,」信用「或」許可證「以獲取更多信息。 >>>進口SSL >>> ssl.PROTOCOL_TLSv1_2 >>> ssl.PROTOCOL_TLSv1 >>>出口() 根@ SO1:/#OpenSSL的版本 的OpenSSL 1.0.1t 5月3日2016' – cybertextron

+0

我得到了同樣的錯誤;( – KingPin

相關問題