1

docker -pydockerptyを使用して、 のコンテナーに接続してコマンドを実行していますucp。コンテナーに割り当てられた疑似端末をハイジャックしようとする場合を除いて、すべてが正常に機能します。

import docker
import dockerpty
import requests

client = docker.Client()
container = client.create_container(
     image='busybox:latest',
     stdin_open=True,
     tty=True,
     command='/bin/sh',
)

requests.packages.urllib3.disable_warnings()
command = "/bin/bash"
dockerpty.exec_command(client, container, command)

ただし、コマンドを実行すると、リモート端末に接続できますが、端末に入力すると次のようになります。

File "build/bdist.macosx-10.12-x86_64/egg/dockerpty/__init__.py", line 44, in exec_command

  File "build/bdist.macosx-10.12-x86_64/egg/dockerpty/pty.py", line 334, in start

  File "build/bdist.macosx-10.12-x86_64/egg/dockerpty/pty.py", line 373, in _hijack_tty

  File "build/bdist.macosx-10.12-x86_64/egg/dockerpty/io.py", line 367, in flush

  File "build/bdist.macosx-10.12-x86_64/egg/dockerpty/io.py", line 120, in read

  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 "build/bdist.macosx-10.11-x86_64/egg/OpenSSL/SSL.py", line 1320, in recv

  File "build/bdist.macosx-10.11-x86_64/egg/OpenSSL/SSL.py", line 1187, in _raise_ssl_error

  File "build/bdist.macosx-10.11-x86_64/egg/OpenSSL/_util.py", line 48, in exception_from_error_queue
OpenSSL.SSL.Error: [('SSL routines', 'ssl3_read_bytes', 'tlsv1 alert protocol version')]

私のopensslバージョンは次のとおりです。

$ openssl version
OpenSSL 1.0.2j  26 Sep 2016

コンテナには次のものがあります。

# openssl version
OpenSSL 1.0.1t  3 May 2016

まあ、両方とも上1.0.1です。必要なのは、バージョン検証を無効にすることだけです。ライブラリを使用すると、次のrequestsことができます。

import requests
response = requests.get(<https url>, verify=False)

私のPythonバージョンは次2.7.12SSLとおりです。

>>> import ssl
>>> print ssl.OPENSSL_VERSION
OpenSSL 1.0.2j  26 Sep 2016

も最新です。コンテナには次のものがPython 2.7.9ありSSLます。

>>> import ssl
>>> print ssl.OPENSSL_VERSION
OpenSSL 1.0.1t  3 May 2016

dockerpty誰かがより良い提案を持っていない限り、私は自分でフォークを作成して変更を追加しようとしています。この問題を解決するにはどうすればよいですか?

4

0 に答える 0