@ -6,7 +6,6 @@ import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
"net"
"net/http"
"net/url"
@ -89,16 +88,14 @@ func (cli *Client) buildRequest(method, path string, body io.Reader, headers hea
return nil , err
}
req = cli . addHeaders ( req , headers )
req . URL . Scheme = cli . scheme
req . URL . Host = cli . addr
if cli . proto == "unix" || cli . proto == "npipe" {
// For local communications, it doesn't matter what the host is. We just
// need a valid and meaningful host name. (See #189)
req . Host = "docker"
// Override host header for non-tcp connections.
req . Host = DummyHost
}
req . URL . Host = cli . addr
req . URL . Scheme = cli . scheme
if expectedPayload && req . Header . Get ( "Content-Type" ) == "" {
req . Header . Set ( "Content-Type" , "text/plain" )
}
@ -129,7 +126,7 @@ func (cli *Client) doRequest(ctx context.Context, req *http.Request) (serverResp
}
if cli . scheme == "https" && strings . Contains ( err . Error ( ) , "bad certificate" ) {
return serverResp , errors . Wrap ( err , " The server probably has client authentication (--tlsverify) enabled. Please check your TLS client certification settings")
return serverResp , errors . Wrap ( err , " the server probably has client authentication (--tlsverify) enabled; check your TLS client certification settings")
}
// Don't decorate context sentinel errors; users may be comparing to
@ -141,7 +138,7 @@ func (cli *Client) doRequest(ctx context.Context, req *http.Request) (serverResp
if nErr , ok := err . ( * url . Error ) ; ok {
if nErr , ok := nErr . Err . ( * net . OpError ) ; ok {
if os . IsPermission ( nErr . Err ) {
return serverResp , errors . Wrapf ( err , " Got permission denied while trying to connect to the Docker daemon socket at %v", cli . host )
return serverResp , errors . Wrapf ( err , " permission denied while trying to connect to the Docker daemon socket at %v", cli . host )
}
}
}
@ -150,12 +147,10 @@ func (cli *Client) doRequest(ctx context.Context, req *http.Request) (serverResp
if err . Timeout ( ) {
return serverResp , ErrorConnectionFailed ( cli . host )
}
if ! err . Temporary ( ) {
if strings . Contains ( err . Error ( ) , "connection refused" ) || strings . Contains ( err . Error ( ) , "dial unix" ) {
return serverResp , ErrorConnectionFailed ( cli . host )
}
}
}
// Although there's not a strongly typed error for this in go-winio,
// lots of people are using the default configuration for the docker
@ -170,10 +165,10 @@ func (cli *Client) doRequest(ctx context.Context, req *http.Request) (serverResp
if strings . Contains ( err . Error ( ) , ` open //./pipe/docker_engine ` ) {
// Checks if client is running with elevated privileges
if f , elevatedErr := os . Open ( "\\\\.\\PHYSICALDRIVE0" ) ; elevatedErr == nil {
err = errors . Wrap ( err , " I n the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect. ")
err = errors . Wrap ( err , " i n the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect")
} else {
f . Close ( )
err = errors . Wrap ( err , " T his error may indicate that the docker daemon is not running. ")
err = errors . Wrap ( err , " t his error may indicate that the docker daemon is not running")
}
}
@ -201,7 +196,7 @@ func (cli *Client) checkResponseErr(serverResp serverResponse) error {
R : serverResp . body ,
N : int64 ( bodyMax ) ,
}
body , err = io util . ReadAll ( bodyR )
body , err = io . ReadAll ( bodyR )
if err != nil {
return err
}
@ -242,11 +237,9 @@ func (cli *Client) addHeaders(req *http.Request, headers headers) *http.Request
req . Header . Set ( k , v )
}
if headers != nil {
for k , v := range headers {
req . Header [ k ] = v
}
}
return req
}
@ -263,7 +256,7 @@ func encodeData(data interface{}) (*bytes.Buffer, error) {
func ensureReaderClosed ( response serverResponse ) {
if response . body != nil {
// Drain up to 512 bytes and close the body to let the Transport reuse the connection
io . CopyN ( io util . Discard , response . body , 512 )
io . CopyN ( io . Discard , response . body , 512 )
response . body . Close ( )
}
}