package utils import ( "net/http" dockerclient "github.com/docker/docker/client" portainer "github.com/portainer/portainer/api" prclient "github.com/portainer/portainer/api/docker/client" "github.com/portainer/portainer/api/http/middlewares" httperror "github.com/portainer/portainer/pkg/libhttp/error" ) // GetClient returns a Docker client based on the request context func GetClient(r *http.Request, dockerClientFactory *prclient.ClientFactory) (*dockerclient.Client, *httperror.HandlerError) { endpoint, err := middlewares.FetchEndpoint(r) if err != nil { return nil, httperror.NotFound("Unable to find an environment on request context", err) } agentTargetHeader := r.Header.Get(portainer.PortainerAgentTargetHeader) cli, err := dockerClientFactory.CreateClient(endpoint, agentTargetHeader, nil) if err != nil { return nil, httperror.InternalServerError("Unable to connect to the Docker daemon", err) } return cli, nil }