From e2447ce57818b1ba4bb3f3bc528761cf0157a211 Mon Sep 17 00:00:00 2001 From: ginuerzh Date: Sat, 6 Jun 2026 20:34:24 +0800 Subject: [PATCH] fix(e2e): use host network for Docker image builds in DinD environments Docker-in-Docker containers cannot reach the internet via the default bridge network, causing 'apk add' in the Dockerfile to hang indefinitely and e2e tests to timeout after 10 minutes. Add BuildOptionsModifier with NetworkMode=host to all FromDockerfile definitions so the build step uses the host's network stack. This has no negative impact on non-DinD environments where bridge networking already works. Also move GostBinPath flag and init() from main_test.go to utils.go (non-test file) so the symbol is accessible across the package. --- go.mod | 2 +- go.sum | 4 ---- tests/e2e/main_test.go | 6 ------ tests/e2e/utils.go | 17 +++++++++++++++++ 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index 40a68a8..17e6d79 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/go-gost/core v0.4.1 github.com/go-gost/x v0.10.11-0.20260605152603-e45d9a8cc81a github.com/judwhite/go-svc v1.2.1 + github.com/moby/moby/client v0.4.0 github.com/stretchr/testify v1.11.1 github.com/testcontainers/testcontainers-go v0.42.0 ) @@ -83,7 +84,6 @@ require ( github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/go-archive v0.2.0 // indirect github.com/moby/moby/api v1.54.1 // indirect - github.com/moby/moby/client v0.4.0 // indirect github.com/moby/patternmatcher v0.6.1 // indirect github.com/moby/sys/sequential v0.6.0 // indirect github.com/moby/sys/user v0.4.0 // indirect diff --git a/go.sum b/go.sum index ff10a5d..6fb98a6 100644 --- a/go.sum +++ b/go.sum @@ -95,8 +95,6 @@ github.com/go-gost/relay v0.6.0 h1:o8r0B3eTw8Rwwent+5x5Cw1g4AyNUl4hNqiyDJXkFvA= github.com/go-gost/relay v0.6.0/go.mod h1:Dku0f5sfjOClrZFiDmQUrYYJ4uof7rnkCUBfsl0PSAI= github.com/go-gost/tls-dissector v0.2.0 h1:9tE6WOzzpurATTBWn60DU4R8gibpGNY8/qVcc1SicVg= github.com/go-gost/tls-dissector v0.2.0/go.mod h1:/9QfdewqmHdaE362Hv5nDaSWLx3pCmtD870d6GaquXs= -github.com/go-gost/x v0.10.10 h1:6PCaXNqNaYsJ1smkK8mTr7UwmXqkQLc0AtL//a5G3xw= -github.com/go-gost/x v0.10.10/go.mod h1:rlFAe9jHSKCEmbps70sZxiU+Wdv3zB6+Li/AqjCUQSM= github.com/go-gost/x v0.10.11-0.20260605152603-e45d9a8cc81a h1:lYfS2JDdlvLbXkd1ynQ8m7TpoWCxnN58M8eUTXScYyc= github.com/go-gost/x v0.10.11-0.20260605152603-e45d9a8cc81a/go.mod h1:BcReQfYxrWetKeZK4Zz25qycpWgSbY4H3k+rD9udJPg= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -254,8 +252,6 @@ github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/quic-go/qpack v0.6.0 h1:g7W+BMYynC1LbYLSqRt8PBg5Tgwxn214ZZR34VIOjz8= github.com/quic-go/qpack v0.6.0/go.mod h1:lUpLKChi8njB4ty2bFLX2x4gzDqXwUpaO1DP9qMDZII= -github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SAw= -github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU= github.com/quic-go/quic-go v0.59.1 h1:0Gmua0HW1Tv7ANR7hUYwRyD0MG5OJfgvYSZasGZzBic= github.com/quic-go/quic-go v0.59.1/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU= github.com/quic-go/webtransport-go v0.10.0 h1:LqXXPOXuETY5Xe8ITdGisBzTYmUOy5eSj+9n4hLTjHI= diff --git a/tests/e2e/main_test.go b/tests/e2e/main_test.go index 5d82d3a..e335fb4 100644 --- a/tests/e2e/main_test.go +++ b/tests/e2e/main_test.go @@ -13,12 +13,6 @@ import ( var SharedNetworkName string -var GostBinPath string - -func init() { - flag.StringVar(&GostBinPath, "gost-bin", "", "Path to a pre-built gost binary (skips compilation)") -} - func TestMain(m *testing.M) { flag.Parse() ctx := context.Background() diff --git a/tests/e2e/utils.go b/tests/e2e/utils.go index 6465736..320865a 100644 --- a/tests/e2e/utils.go +++ b/tests/e2e/utils.go @@ -2,15 +2,23 @@ package e2e import ( "context" + "flag" "io" "os" "testing" "text/template" + "github.com/moby/moby/client" "github.com/testcontainers/testcontainers-go" "github.com/testcontainers/testcontainers-go/wait" ) +var GostBinPath string + +func init() { + flag.StringVar(&GostBinPath, "gost-bin", "", "Path to a pre-built gost binary (skips compilation)") +} + type ConfigData struct { ServerAddr string } @@ -70,6 +78,9 @@ func echoContainerRequest(_ context.Context, networkName string) testcontainers. Repo: "gost-e2e", Tag: "latest", KeepImage: true, + BuildOptionsModifier: func(opts *client.ImageBuildOptions) { + opts.NetworkMode = "host" + }, }, Networks: []string{networkName}, NetworkAliases: map[string][]string{ @@ -100,6 +111,9 @@ func udpEchoContainerRequest(_ context.Context, networkName string) testcontaine Repo: "gost-e2e", Tag: "latest", KeepImage: true, + BuildOptionsModifier: func(opts *client.ImageBuildOptions) { + opts.NetworkMode = "host" + }, }, Networks: []string{networkName}, NetworkAliases: map[string][]string{ @@ -134,6 +148,9 @@ func runGostContainer(ctx context.Context, networkName, yamlPath string, aliases Repo: "gost-e2e", Tag: "latest", KeepImage: true, + BuildOptionsModifier: func(opts *client.ImageBuildOptions) { + opts.NetworkMode = "host" + }, }, ExposedPorts: exposedPorts, // interal check for udp ports will be failed