docker-archive / classicswarm

Swarm Classic: a container clustering system. Not to be confused with Docker Swarm which is at https://github.com/docker/swarmkit
Apache License 2.0
5.75k stars 1.08k forks source link

Docker Python Client with error ConnectionResetError: [Errno 104] Connection reset by peer #2935

Closed iNevd closed 4 years ago

iNevd commented 5 years ago

Env

Client: python using docker-py Server: swarm 1.2.9 Docker: Server Version: 18.09.0

Problem

ConnectionResetError: [Errno 104] Connection reset by peer occurrence of instability

Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen
chunked=chunked)
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 384, in _make_request
six.raise_from(e, None)
File "<string>", line 2, in raise_from
File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 380, in _make_request
httplib_response = conn.getresponse()
File "/usr/lib/python3.6/http/client.py", line 1331, in getresponse
response.begin()
File "/usr/lib/python3.6/http/client.py", line 297, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.6/http/client.py", line 258, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/usr/lib/python3.6/socket.py", line 586, in readinto
return self._sock.recv_into(b)
ConnectionResetError: [Errno 104] Connection reset by peer
……
File "/app/common/docker/container.py", line 13, in list
sparse=sparse, ignore_removed=ignore_removed)
File "/usr/lib/python3.6/site-packages/docker/models/containers.py", line 918, in list
since=since)
File "/usr/lib/python3.6/site-packages/docker/api/container.py", line 208, in containers
res = self._result(self._get(u, params=params), True)
File "/usr/lib/python3.6/site-packages/docker/utils/decorators.py", line 46, in inner
return f(self, *args, **kwargs)
File "/usr/lib/python3.6/site-packages/docker/api/client.py", line 225, in _get
return self.get(url, **self._set_request_timeout(kwargs))
File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 546, in get
return self.request('GET', url, **kwargs)
File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3.6/site-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3.6/site-packages/requests/adapters.py", line 498, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))

Solution

rebuild swarm: with change https://github.com/docker/swarm/blob/master/api/server.go#L94

                server = &http.Server{
                    Addr:        protoAddrParts[1],
                    Handler:     s.dispatcher,
                    IdleTimeout: 168 * time.Hour,
                }

More

Can we set up the IdleTimeout of http server to make 'Better adaptability'