2016-09-26 8 views
2

Docker Python APIを使用してexecコマンドを実行するために、Docker-pydockerptyを使用しています。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')] 

私はクライアントを作成するときに、私はtlsv1.2を使用するtls_configを指定:

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 

このような場合は、>=2.7.9にあなたのドッキングウィンドウの画像にはPythonをアップデートしてみてください。

opensslバージョンが>1.0.1であることも確認してください。

+0

両方のための答えはイエスです: 'ルートの@ SO1:linux2 タイプ「ヘルプオン/#パイソン のPython 2.7.9(デフォルト、2016年6月29日、13時08分31秒) [GCC 4.9.2] "、"著作権 "、"クレジット "または"ライセンス "を参照してください。 >>>インポートSSL >>> ssl.PROTOCOL_TLSv1_2 >>> ssl.PROTOCOL_TLSv1 >>>退出() ルートの@ SO1:/#のopensslのバージョン のOpenSSL 1.0.1t 5月3日2016' – cybertextron

+0

私も同じエラーが出た;( – KingPin

関連する問題