From 8b837ea1bf1b56409688560c992c0ed63b34c678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Thu, 13 Oct 2022 18:03:59 +0200 Subject: [PATCH 1/5] chore: add a banner qhen Ryuk is disabled --- docker.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docker.go b/docker.go index f8ab69ebb0..307530a2d0 100644 --- a/docker.go +++ b/docker.go @@ -934,6 +934,12 @@ func (p *DockerProvider) CreateContainer(ctx context.Context, req ContainerReque req.Labels[k] = v } } + } else { + ryukDisabledMessage := ` +************************************************************************************************* +Ryuk has been disabled for the container. This can cause unexpected behavior in your environment. +*************************************************************************************************` + p.Logger.Printf(ryukDisabledMessage) } if err = req.Validate(); err != nil { @@ -1145,6 +1151,12 @@ func (p *DockerProvider) ReuseOrCreateContainer(ctx context.Context, req Contain if err != nil { return nil, fmt.Errorf("%w: connecting to reaper failed", err) } + } else { + ryukDisabledMessage := ` +************************************************************************************************* +Ryuk has been disabled for the container. This can cause unexpected behavior in your environment. +*************************************************************************************************` + p.Logger.Printf(ryukDisabledMessage) } dc := &DockerContainer{ ID: c.ID, @@ -1304,6 +1316,12 @@ func (p *DockerProvider) CreateNetwork(ctx context.Context, req NetworkRequest) req.Labels[k] = v } } + } else { + ryukDisabledMessage := ` +********************************************************************************************** +Ryuk has been disabled for the network. This can cause unexpected behavior in your environment. +**********************************************************************************************` + p.Logger.Printf(ryukDisabledMessage) } response, err := p.client.NetworkCreate(ctx, req.Name, nc) From ed4126fb41342d5172c981a13c5f35b0d07875ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Thu, 13 Oct 2022 18:07:16 +0200 Subject: [PATCH 2/5] docs: document unexpected behaviors when disabling Ryuk --- docs/features/garbage_collector.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/features/garbage_collector.md b/docs/features/garbage_collector.md index 3fa87eeb5d..e2983f05e5 100644 --- a/docs/features/garbage_collector.md +++ b/docs/features/garbage_collector.md @@ -37,9 +37,9 @@ container labels to determine which resources were created by the package to determine the entities that are safe to remove. If a container is running for more than 10 seconds, it will be killed. -!!!tip +!!!warning - This feature can be disabled when creating a container. + This feature can be disabled when creating a container or a network, but it can cause **unexpected behavior** in your environment. Even if you do not call Terminate, Ryuk ensures that the environment will be kept clean and even cleans itself when there is nothing left to do. From 7917f41347482bede72a15081f7126a1f00f375b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Thu, 13 Oct 2022 18:09:06 +0200 Subject: [PATCH 3/5] chore: link to docs in the message --- docker.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker.go b/docker.go index 307530a2d0..167f57d555 100644 --- a/docker.go +++ b/docker.go @@ -938,6 +938,7 @@ func (p *DockerProvider) CreateContainer(ctx context.Context, req ContainerReque ryukDisabledMessage := ` ************************************************************************************************* Ryuk has been disabled for the container. This can cause unexpected behavior in your environment. +More on this: https://golang.testcontainers.org/features/garbage_collector/ *************************************************************************************************` p.Logger.Printf(ryukDisabledMessage) } @@ -1155,6 +1156,7 @@ func (p *DockerProvider) ReuseOrCreateContainer(ctx context.Context, req Contain ryukDisabledMessage := ` ************************************************************************************************* Ryuk has been disabled for the container. This can cause unexpected behavior in your environment. +More on this: https://golang.testcontainers.org/features/garbage_collector/ *************************************************************************************************` p.Logger.Printf(ryukDisabledMessage) } @@ -1320,6 +1322,7 @@ func (p *DockerProvider) CreateNetwork(ctx context.Context, req NetworkRequest) ryukDisabledMessage := ` ********************************************************************************************** Ryuk has been disabled for the network. This can cause unexpected behavior in your environment. +More on this: https://golang.testcontainers.org/features/garbage_collector/ **********************************************************************************************` p.Logger.Printf(ryukDisabledMessage) } From e2efb44f41b54e9491225745e4457e297b4df912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Thu, 13 Oct 2022 18:16:25 +0200 Subject: [PATCH 4/5] docs: improve message in docs --- docs/features/garbage_collector.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/features/garbage_collector.md b/docs/features/garbage_collector.md index e2983f05e5..c52fcd29d5 100644 --- a/docs/features/garbage_collector.md +++ b/docs/features/garbage_collector.md @@ -39,7 +39,11 @@ for more than 10 seconds, it will be killed. !!!warning - This feature can be disabled when creating a container or a network, but it can cause **unexpected behavior** in your environment. + This feature can be disabled when creating a container or a network, + but it can cause **unexpected behavior** in your environment. + + We recommend using it only for Continuous Integration services that have their + own mechanism to clean up resources. Even if you do not call Terminate, Ryuk ensures that the environment will be kept clean and even cleans itself when there is nothing left to do. From cc648ca312350a09943691104dc47ad59707438e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20de=20la=20Pe=C3=B1a?= Date: Fri, 14 Oct 2022 10:57:53 +0200 Subject: [PATCH 5/5] chore: extract banner to a function --- docker.go | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/docker.go b/docker.go index 167f57d555..fe2ee9621c 100644 --- a/docker.go +++ b/docker.go @@ -935,12 +935,7 @@ func (p *DockerProvider) CreateContainer(ctx context.Context, req ContainerReque } } } else { - ryukDisabledMessage := ` -************************************************************************************************* -Ryuk has been disabled for the container. This can cause unexpected behavior in your environment. -More on this: https://golang.testcontainers.org/features/garbage_collector/ -*************************************************************************************************` - p.Logger.Printf(ryukDisabledMessage) + p.printReaperBanner("container") } if err = req.Validate(); err != nil { @@ -1153,12 +1148,7 @@ func (p *DockerProvider) ReuseOrCreateContainer(ctx context.Context, req Contain return nil, fmt.Errorf("%w: connecting to reaper failed", err) } } else { - ryukDisabledMessage := ` -************************************************************************************************* -Ryuk has been disabled for the container. This can cause unexpected behavior in your environment. -More on this: https://golang.testcontainers.org/features/garbage_collector/ -*************************************************************************************************` - p.Logger.Printf(ryukDisabledMessage) + p.printReaperBanner("container") } dc := &DockerContainer{ ID: c.ID, @@ -1319,12 +1309,7 @@ func (p *DockerProvider) CreateNetwork(ctx context.Context, req NetworkRequest) } } } else { - ryukDisabledMessage := ` -********************************************************************************************** -Ryuk has been disabled for the network. This can cause unexpected behavior in your environment. -More on this: https://golang.testcontainers.org/features/garbage_collector/ -**********************************************************************************************` - p.Logger.Printf(ryukDisabledMessage) + p.printReaperBanner("network") } response, err := p.client.NetworkCreate(ctx, req.Name, nc) @@ -1383,6 +1368,15 @@ func (p *DockerProvider) GetGatewayIP(ctx context.Context) (string, error) { return ip, nil } +func (p *DockerProvider) printReaperBanner(resource string) { + ryukDisabledMessage := ` + ********************************************************************************************** + Ryuk has been disabled for the ` + resource + `. This can cause unexpected behavior in your environment. + More on this: https://golang.testcontainers.org/features/garbage_collector/ + **********************************************************************************************` + p.Logger.Printf(ryukDisabledMessage) +} + func inAContainer() bool { // see https://github.com/testcontainers/testcontainers-java/blob/3ad8d80e2484864e554744a4800a81f6b7982168/core/src/main/java/org/testcontainers/dockerclient/DockerClientConfigUtils.java#L15 if _, err := os.Stat("/.dockerenv"); err == nil {