mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #8526 from vbatts/vbatts-too_many_open_files
client: even cleaner use of Transport
This commit is contained in:
commit
f0eb1ef4e1
2 changed files with 19 additions and 18 deletions
|
@ -5,10 +5,13 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"text/template"
|
"text/template"
|
||||||
|
"time"
|
||||||
|
|
||||||
flag "github.com/docker/docker/pkg/mflag"
|
flag "github.com/docker/docker/pkg/mflag"
|
||||||
"github.com/docker/docker/pkg/term"
|
"github.com/docker/docker/pkg/term"
|
||||||
|
@ -34,6 +37,7 @@ type DockerCli struct {
|
||||||
isTerminalIn bool
|
isTerminalIn bool
|
||||||
// isTerminalOut describes if client's STDOUT is a TTY
|
// isTerminalOut describes if client's STDOUT is a TTY
|
||||||
isTerminalOut bool
|
isTerminalOut bool
|
||||||
|
transport *http.Transport
|
||||||
}
|
}
|
||||||
|
|
||||||
var funcMap = template.FuncMap{
|
var funcMap = template.FuncMap{
|
||||||
|
@ -131,6 +135,19 @@ func NewDockerCli(in io.ReadCloser, out, err io.Writer, key libtrust.PrivateKey,
|
||||||
err = out
|
err = out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The transport is created here for reuse during the client session
|
||||||
|
tr := &http.Transport{
|
||||||
|
TLSClientConfig: tlsConfig,
|
||||||
|
Dial: func(dial_network, dial_addr string) (net.Conn, error) {
|
||||||
|
// Why 32? See issue 8035
|
||||||
|
return net.DialTimeout(proto, addr, 32*time.Second)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if proto == "unix" {
|
||||||
|
// no need in compressing for local communications
|
||||||
|
tr.DisableCompression = true
|
||||||
|
}
|
||||||
|
|
||||||
return &DockerCli{
|
return &DockerCli{
|
||||||
proto: proto,
|
proto: proto,
|
||||||
addr: addr,
|
addr: addr,
|
||||||
|
@ -144,5 +161,6 @@ func NewDockerCli(in io.ReadCloser, out, err io.Writer, key libtrust.PrivateKey,
|
||||||
isTerminalOut: isTerminalOut,
|
isTerminalOut: isTerminalOut,
|
||||||
tlsConfig: tlsConfig,
|
tlsConfig: tlsConfig,
|
||||||
scheme: scheme,
|
scheme: scheme,
|
||||||
|
transport: tr,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
@ -16,7 +15,6 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/docker/docker/api"
|
"github.com/docker/docker/api"
|
||||||
"github.com/docker/docker/dockerversion"
|
"github.com/docker/docker/dockerversion"
|
||||||
|
@ -33,22 +31,7 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
func (cli *DockerCli) HTTPClient() *http.Client {
|
func (cli *DockerCli) HTTPClient() *http.Client {
|
||||||
tr := &http.Transport{
|
return &http.Client{Transport: cli.transport}
|
||||||
TLSClientConfig: cli.tlsConfig,
|
|
||||||
Dial: func(network, addr string) (net.Conn, error) {
|
|
||||||
// Why 32? See issue 8035
|
|
||||||
return net.DialTimeout(cli.proto, cli.addr, 32*time.Second)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
if cli.proto == "unix" {
|
|
||||||
// XXX workaround for net/http Transport which caches connections, but is
|
|
||||||
// intended for tcp connections, not unix sockets.
|
|
||||||
tr.DisableKeepAlives = true
|
|
||||||
|
|
||||||
// no need in compressing for local communications
|
|
||||||
tr.DisableCompression = true
|
|
||||||
}
|
|
||||||
return &http.Client{Transport: tr}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cli *DockerCli) encodeData(data interface{}) (*bytes.Buffer, error) {
|
func (cli *DockerCli) encodeData(data interface{}) (*bytes.Buffer, error) {
|
||||||
|
|
Loading…
Reference in a new issue