From 9dd48672fbe5102850fa158a825ed82fef626c4b Mon Sep 17 00:00:00 2001 From: Ben Elgar Date: Wed, 17 Nov 2021 16:48:17 +0000 Subject: [PATCH 1/3] Use brige gateway as syslog host --- .../docker/components/container/lifecycle.go | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/internal/providers/docker/components/container/lifecycle.go b/internal/providers/docker/components/container/lifecycle.go index b5b6c20fe..77e8c64b2 100644 --- a/internal/providers/docker/components/container/lifecycle.go +++ b/internal/providers/docker/components/container/lifecycle.go @@ -6,7 +6,6 @@ import ( "fmt" "os/user" "path" - "runtime" "strconv" "strings" "time" @@ -89,11 +88,6 @@ func (c *Container) Initialize(ctx context.Context, input *core.InitializeInput) } func (c *Container) create(ctx context.Context, spec *Spec) error { - dockerInfo, err := c.Docker.Info(ctx) - if err != nil { - return fmt.Errorf("getting docker info: %w", err) - } - var healthCfg *container.HealthConfig if spec.Healthcheck != nil { healthCfg = &container.HealthConfig{ @@ -204,12 +198,15 @@ func (c *Container) create(ctx context.Context, spec *Spec) error { // No logging configuration specified, so default to logging to exo's // syslog service. logCfg.Type = "syslog" - syslogHost := "localhost" - // TODO: Find an OS-agnostic way to figure out the "gateway-host" name as - // reachable from the dockerd process. - if runtime.GOOS == "darwin" || strings.Contains(dockerInfo.KernelVersion, "microsoft") { - syslogHost = "host.docker.internal" + bridge, err := c.Docker.NetworkInspect(ctx, "bridge", types.NetworkInspectOptions{}) + if err != nil { + return fmt.Errorf("inspecting bridge network: %w", err) + } + if len(bridge.IPAM.Config) != 1 { + return fmt.Errorf("bridge network has %d IPAM configs, expected 1", len(bridge.IPAM.Config)) } + syslogHost := bridge.IPAM.Config[0].Gateway + logCfg.Config = map[string]string{ "syslog-address": fmt.Sprintf("udp://%s:%d", syslogHost, c.SyslogPort), "syslog-facility": "1", // "user-level messages" From a15b10f0579a52f795f870d122bb0b64d152ac00 Mon Sep 17 00:00:00 2001 From: Ben Elgar Date: Wed, 17 Nov 2021 16:54:11 +0000 Subject: [PATCH 2/3] Fix missing var declaraction --- internal/providers/docker/components/container/lifecycle.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/providers/docker/components/container/lifecycle.go b/internal/providers/docker/components/container/lifecycle.go index 77e8c64b2..12247dae6 100644 --- a/internal/providers/docker/components/container/lifecycle.go +++ b/internal/providers/docker/components/container/lifecycle.go @@ -308,6 +308,7 @@ func (c *Container) create(ctx context.Context, spec *Spec) error { Init: spec.Init.Ptr(), } + var err error if hostCfg.IpcMode, err = c.parseIPCMode(spec.IPC.Value); err != nil { return err } From 07cabcc5f3acbc48de2e5687676bc7bd6e5a542b Mon Sep 17 00:00:00 2001 From: Ben Elgar Date: Thu, 18 Nov 2021 11:54:54 +0000 Subject: [PATCH 3/3] Detect using docker daemon host --- .../docker/components/container/lifecycle.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/internal/providers/docker/components/container/lifecycle.go b/internal/providers/docker/components/container/lifecycle.go index 12247dae6..f3084062e 100644 --- a/internal/providers/docker/components/container/lifecycle.go +++ b/internal/providers/docker/components/container/lifecycle.go @@ -198,15 +198,11 @@ func (c *Container) create(ctx context.Context, spec *Spec) error { // No logging configuration specified, so default to logging to exo's // syslog service. logCfg.Type = "syslog" - bridge, err := c.Docker.NetworkInspect(ctx, "bridge", types.NetworkInspectOptions{}) - if err != nil { - return fmt.Errorf("inspecting bridge network: %w", err) - } - if len(bridge.IPAM.Config) != 1 { - return fmt.Errorf("bridge network has %d IPAM configs, expected 1", len(bridge.IPAM.Config)) + dockerIsLocal := strings.HasPrefix(c.Docker.DaemonHost(), "unix://") + syslogHost := "host.docker.internal" + if dockerIsLocal { + syslogHost = "localhost" } - syslogHost := bridge.IPAM.Config[0].Gateway - logCfg.Config = map[string]string{ "syslog-address": fmt.Sprintf("udp://%s:%d", syslogHost, c.SyslogPort), "syslog-facility": "1", // "user-level messages"