From 62e95c46bda9731097d4b06bacab8bc174ca85b3 Mon Sep 17 00:00:00 2001 From: hwwwi Date: Sat, 8 Oct 2022 11:24:11 +0900 Subject: [PATCH] fix: use regex to find container by name --- docker.go | 4 +++- docker_test.go | 41 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/docker.go b/docker.go index d8be4bcfcc..b4c3e9b441 100644 --- a/docker.go +++ b/docker.go @@ -1109,9 +1109,11 @@ func (p *DockerProvider) findContainerByName(ctx context.Context, name string) ( if name == "" { return nil, nil } + + // Note that, 'name' filter will use regex to find the containers filter := filters.NewArgs(filters.KeyValuePair{ Key: "name", - Value: name, + Value: fmt.Sprintf("^%s$", name), }) containers, err := p.client.ContainerList(ctx, types.ContainerListOptions{Filters: filter}) if err != nil { diff --git a/docker_test.go b/docker_test.go index fe77f7a8ad..128db4f296 100644 --- a/docker_test.go +++ b/docker_test.go @@ -5,6 +5,7 @@ import ( "database/sql" "errors" "fmt" + _ "github.com/go-sql-driver/mysql" "io" "io/ioutil" "math/rand" @@ -28,9 +29,6 @@ import ( "github.com/docker/docker/api/types/volume" - // Import mysql into the scope of this package (required) - _ "github.com/go-sql-driver/mysql" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/client" @@ -2398,3 +2396,40 @@ func randomString() string { } return b.String() } + +func TestDockerProviderFindContainerByName(t *testing.T) { + ctx := context.Background() + provider, err := NewDockerProvider(WithLogger(TestLogger(t))) + require.NoError(t, err) + + c1, err := GenericContainer(ctx, GenericContainerRequest{ + ProviderType: providerType, + ContainerRequest: ContainerRequest{ + Name: "test", + Image: "nginx:1.17.6", + WaitingFor: wait.ForExposedPort(), + }, + Started: true, + }) + require.NoError(t, err) + c1Name, err := c1.Name(ctx) + require.NoError(t, err) + terminateContainerOnEnd(t, ctx, c1) + + c2, err := GenericContainer(ctx, GenericContainerRequest{ + ProviderType: providerType, + ContainerRequest: ContainerRequest{ + Name: "test2", + Image: "nginx:1.17.6", + WaitingFor: wait.ForExposedPort(), + }, + Started: true, + }) + require.NoError(t, err) + terminateContainerOnEnd(t, ctx, c2) + + c, err := provider.findContainerByName(ctx, "test") + assert.NoError(t, err) + require.NotNil(t, c) + assert.Contains(t, c.Names, c1Name) +}