docker-py: Timeout incompatibility
Hi, i’m on a Debian Sid with docker-py 0.5.3-1 and i have a problem with timeout parameter :
import docker
c = docker.Client(base_url='unix://var/run/docker.sock', version='1.15', timeout=2.0)
l = c.containers(all=True)
trace :
Traceback (most recent call last):
File "./check.py", line 10, in <module>
l = c.containers(all=True)
File "/usr/lib/python2.7/dist-packages/docker/client.py", line 493, in containers
res = self._result(self._get(u, params=params), True)
File "/usr/lib/python2.7/dist-packages/docker/client.py", line 76, in _get
return self.get(url, **self._set_request_timeout(kwargs))
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 469, in get
return self.request('GET', url, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 457, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python2.7/dist-packages/requests/sessions.py", line 569, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python2.7/dist-packages/requests/adapters.py", line 362, in send
timeout=timeout
File "/usr/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py", line 522, in urlopen
body=body, headers=headers)
File "/usr/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py", line 305, in _make_request
timeout_obj = self._get_timeout(timeout)
File "/usr/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py", line 285, in _get_timeout
return Timeout.from_float(timeout)
File "/usr/lib/python2.7/dist-packages/requests/packages/urllib3/util/timeout.py", line 152, in from_float
return Timeout(read=timeout, connect=timeout)
File "/usr/lib/python2.7/dist-packages/requests/packages/urllib3/util/timeout.py", line 95, in __init__
self._connect = self._validate_timeout(connect, 'connect')
File "/usr/lib/python2.7/dist-packages/requests/packages/urllib3/util/timeout.py", line 125, in _validate_timeout
"int or float." % (name, value))
ValueError: Timeout value connect was Timeout(connect=2.0, read=2.0, total=None), but it must be an int or float.
To fix the problem i have to modify directly /usr/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py
def _get_timeout(self, timeout):
""" Helper that always returns a :class:`urllib3.util.Timeout` """
if timeout is _Default:
return self.timeout.clone()
if isinstance(timeout, Timeout): <========================== Timeout is not a urllib3 timeout
return timeout.clone()
else:
# User passed us an int/float. This is for backwards compatibility,
# can be removed later
return Timeout.from_float(timeout._connect ) <======================= manually entered _connect
I thnk it’s a docker-py problem…
About this issue
- Original URL
- State: closed
- Created 10 years ago
- Comments: 18 (6 by maintainers)
No yeah, actually, try downgrading your version of requests (
pip install -U requests==2.5.3
) and see if it helps.What happens if you
pip install -U requests==2.5.3
? Same issue?I do not think it is python-docker packaging problem, because when I install docker-py with
pip install docker-py
on debian Wheezy/Jessie I get the exact same problem.Modifying the requests library is not a solution for me because it can break other libraries. So I changed docker-py as follows:
Replaced in
/docker/unixconn/unixconn.py
(usually under /usr/local/lib/python2.7/dist-packages):With just
import urllib3.connectionpool as connectionpool
And similarly I replaced in
/docker/ssladapter/ssladapter.py
:With
import urllib3
Same thing with
from requests.packages.urllib3._collections import RecentlyUsedContainer