mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-24 17:28:31 +02:00
refactor(docker): update ListContainers function to accept context and improve timeout handling
This commit is contained in:
@@ -2,8 +2,6 @@ package docker
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/docker/docker/api/types/container"
|
"github.com/docker/docker/api/types/container"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
@@ -21,16 +19,13 @@ var listOptions = container.ListOptions{
|
|||||||
All: true,
|
All: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
func ListContainers(clientHost string) ([]container.Summary, error) {
|
func ListContainers(ctx context.Context, clientHost string) ([]container.Summary, error) {
|
||||||
dockerClient, err := NewClient(clientHost)
|
dockerClient, err := NewClient(clientHost)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer dockerClient.Close()
|
defer dockerClient.Close()
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeoutCause(context.Background(), 3*time.Second, errors.New("list containers timeout"))
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
containers, err := dockerClient.ContainerList(ctx, listOptions)
|
containers, err := dockerClient.ContainerList(ctx, listOptions)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
package provider
|
package provider
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/docker/docker/client"
|
|
||||||
"github.com/goccy/go-yaml"
|
"github.com/goccy/go-yaml"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
"github.com/yusing/go-proxy/internal/common"
|
|
||||||
"github.com/yusing/go-proxy/internal/docker"
|
"github.com/yusing/go-proxy/internal/docker"
|
||||||
"github.com/yusing/go-proxy/internal/gperr"
|
"github.com/yusing/go-proxy/internal/gperr"
|
||||||
"github.com/yusing/go-proxy/internal/route"
|
"github.com/yusing/go-proxy/internal/route"
|
||||||
@@ -31,9 +31,6 @@ const (
|
|||||||
var ErrAliasRefIndexOutOfRange = gperr.New("index out of range")
|
var ErrAliasRefIndexOutOfRange = gperr.New("index out of range")
|
||||||
|
|
||||||
func DockerProviderImpl(name, dockerHost string) ProviderImpl {
|
func DockerProviderImpl(name, dockerHost string) ProviderImpl {
|
||||||
if dockerHost == common.DockerHostFromEnv {
|
|
||||||
dockerHost = common.GetEnvString("DOCKER_HOST", client.DefaultDockerHost)
|
|
||||||
}
|
|
||||||
return &DockerProvider{
|
return &DockerProvider{
|
||||||
name,
|
name,
|
||||||
dockerHost,
|
dockerHost,
|
||||||
@@ -62,7 +59,10 @@ func (p *DockerProvider) NewWatcher() watcher.Watcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *DockerProvider) loadRoutesImpl() (route.Routes, gperr.Error) {
|
func (p *DockerProvider) loadRoutesImpl() (route.Routes, gperr.Error) {
|
||||||
containers, err := docker.ListContainers(p.dockerHost)
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
containers, err := docker.ListContainers(ctx, p.dockerHost)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, gperr.Wrap(err)
|
return nil, gperr.Wrap(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,10 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/docker/docker/client"
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"github.com/yusing/go-proxy/agent/pkg/agent"
|
"github.com/yusing/go-proxy/agent/pkg/agent"
|
||||||
|
"github.com/yusing/go-proxy/internal/common"
|
||||||
"github.com/yusing/go-proxy/internal/docker"
|
"github.com/yusing/go-proxy/internal/docker"
|
||||||
"github.com/yusing/go-proxy/internal/gperr"
|
"github.com/yusing/go-proxy/internal/gperr"
|
||||||
"github.com/yusing/go-proxy/internal/route"
|
"github.com/yusing/go-proxy/internal/route"
|
||||||
@@ -67,6 +69,10 @@ func NewFileProvider(filename string) (p *Provider, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewDockerProvider(name string, dockerHost string) *Provider {
|
func NewDockerProvider(name string, dockerHost string) *Provider {
|
||||||
|
if dockerHost == common.DockerHostFromEnv {
|
||||||
|
dockerHost = common.GetEnvString("DOCKER_HOST", client.DefaultDockerHost)
|
||||||
|
}
|
||||||
|
|
||||||
p := newProvider(provider.ProviderTypeDocker)
|
p := newProvider(provider.ProviderTypeDocker)
|
||||||
p.ProviderImpl = DockerProviderImpl(name, dockerHost)
|
p.ProviderImpl = DockerProviderImpl(name, dockerHost)
|
||||||
p.watcher = p.NewWatcher()
|
p.watcher = p.NewWatcher()
|
||||||
|
|||||||
Reference in New Issue
Block a user