Skip to content

feat(kafka,redpanda): support for waiting for mapped ports without external checks #3165

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conversation

mabrarov
Copy link
Contributor

@mabrarov mabrarov commented May 15, 2025

Changes

  • fix(kafka): waiting for mapped port without trying to connect to it (which is not possible due to Kafka is not started at that point of time) in container post start hook which prepares configuration for Kafka (fix for [Bug]: Regression for Kafka #2748).
  • fix(redpanda): waiting for mapped ports without trying to connect to them (which is not possible due to Redpanda is not started at that point of time) in container post start hook before preparing configuration for Redpanda which requires completion of port mapping (fix for [Bug]: Regression for Kafka #2748).
  • fix(redpanda): UNIX path for target file when copying files into container with Redpanda (which is Linux based) to run correctly when host OS is Windows.
  • fix(redpanda): support of remote Docker Engine in tests utilizing TLS.
  • chore(redpanda): unused const removed.

What does this PR do?

  1. Fixes deadlock at the start of container in Kafka and Redpanda modules when remote Docker Engine is used.
  2. Fixes Redpanda module when host OS is Windows.
  3. Adds a new wait strategy alias for the HostPort strategy, which waits for a MappedPort. This is useful for situations when you just need the port to be ready, but you don't need to perform neither an internal or external check for it. For that reason, a new SkipExternalCheck fluent method has been added to the strategy, for users to created more advanced waits.

Why is it important?

  1. Usage of remote Docker Engine can be required for CI/CD.
  2. Support of Windows host (e.g. using local Docker Desktop or remote Docker Engine) in Redpanda module.

Related issues

How to test this PR

Refer to:

  1. https://github.com/mabrarov/testcontainers-go-kafka-2748 (feat/kafka_redpanda_wait_for_mapped_port branch of that repo uses this PR source branch) - to test [Bug]: Regression for Kafka #2748
  2. https://github.com/mabrarov/testcontainers-go-kafka-2670 (feat/kafka_redpanda_wait_for_mapped_port branch of that repo uses this PR source branch) - to ensure there is no regression for [Bug]: intermittent "port not found" error preventing Kafka and generic containers from starting #2670

Tested environments / cases (along with environments / tests described in repro repo listed above):

  1. Tests for Kafka and Redpanda modules run on Windows 11 24H2 against remote Docker Engine 28.1.1 on Rocky Linux 9.5.
  2. Tests for Kafka and Redpanda modules run on Rocky Linux 9.5 against local Docker Engine 28.1.1.
  3. Tests for Kafka and Redpanda modules run on Windows 11 23H2 against local Docker Desktop 4.41.2 (Docker Engine 28.1.1) with WSL 2.

Follow-ups

Refer to #2670 (comment).

@mabrarov mabrarov requested a review from a team as a code owner May 15, 2025 23:20
Copy link

netlify bot commented May 15, 2025

Deploy Preview for testcontainers-go ready!

Name Link
🔨 Latest commit f2c8549
🔍 Latest deploy log https://app.netlify.com/projects/testcontainers-go/deploys/683a4f6fe50bf4000803000c
😎 Deploy Preview https://deploy-preview-3165--testcontainers-go.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Copy link
Contributor

@stevenh stevenh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I understand the issue you're experiencing now, so many thanks for all your effort on this.

If you could review the comment below to confirm we're on the same page and if so you're thoughts taking on the suggestion of how to proceed?

@mabrarov mabrarov force-pushed the fix/kafka_redpanda_wait_for_mapped_port branch from 856accf to 4658171 Compare May 20, 2025 18:13
@mabrarov
Copy link
Contributor Author

Hi,

If this is the case we should add a new option to HostPortStrategy SkipExternalCheck() mirroring the existing SkipInternalCheck() instead of this WaitForMappedPort function.

This is done (forced pushed changes into this PR. updated repro repositories and rerun tests).

Thank you.

Copy link
Contributor

@stevenh stevenh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the updates, getting there.

Have put some suggestions for you, if you aren't aware we use conventional comments to help folks understand the intent better.

Copy link
Contributor

@stevenh stevenh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missed clicking request changes, see above.

@mabrarov
Copy link
Contributor Author

Hi @stevenh,

Regarding your ask for details:

While this works using local docker desktop, arguably it shouldn't, it doesn't work in your environment. I would really be interested in the output from your environment for nc -vz <ip> <exposed port> when the container is in startup.

I updated https://github.com/mabrarov/testcontainers-go-kafka-2748/blob/master/README.md and the last screenshot (at the bottom of file) confuses me - it looks like wrong port is checked there (33509 instead of 33508) - so I'm going to investigate it deeper.

Thank you.

@stevenh
Copy link
Contributor

stevenh commented May 20, 2025

Hi @stevenh,

Regarding your ask for details:

While this works using local docker desktop, arguably it shouldn't, it doesn't work in your environment. I would really be interested in the output from your environment for nc -vz <ip> <exposed port> when the container is in startup.

I updated https://github.com/mabrarov/testcontainers-go-kafka-2748/blob/master/README.md and the last screenshot (at the bottom of file) confuses me - it looks like wrong port is checked there (33509 instead of 33508) - so I'm going to investigate it deeper.

Thank you.

Not sure I understand 33508 is the ryuk port, 33509 is the kafka ports, so its what I would expect?

@mabrarov
Copy link
Contributor Author

Hi @stevenh,

Yes, my test was wrong (was checking wrong port from PowerShell). Updating it right now.

Thank you.

@mabrarov
Copy link
Contributor Author

Hi @stevenh,

https://github.com/mabrarov/testcontainers-go-kafka-2748/blob/master/README.md is fixed now and is ready for your review (Local Docker Engine and Remote Docker Engine sections). In the meantime I'm going to address this pull request comments.

Thank you for your patience.

@mabrarov mabrarov force-pushed the fix/kafka_redpanda_wait_for_mapped_port branch from 4658171 to e0d741f Compare May 20, 2025 21:32
@mabrarov mabrarov requested review from stevenh and mdelapenya May 20, 2025 21:33
Copy link
Contributor

@stevenh stevenh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Getting close, just a few bits to fix.

@stevenh
Copy link
Contributor

stevenh commented May 21, 2025

Hi @stevenh,

https://github.com/mabrarov/testcontainers-go-kafka-2748/blob/master/README.md is fixed now and is ready for your review (Local Docker Engine and Remote Docker Engine sections). In the meantime I'm going to address this pull request comments.

Thank you for your patience.

So it looks like nc is getting the right results, could you also run a test with go:

package main

import (
	"context"
	"fmt"
	"net"
	"os"
	"time"
)

func main() {
	if len(os.Args) < 2 {
		fmt.Println("Usage: go run main.go <host:port>")
		return
	}
	address := os.Args[1]

	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	var dialer net.Dialer
	conn, err := dialer.DialContext(ctx, "tcp", address)
	if err != nil {
		fmt.Printf("Dial error: %#v\n", err)
		return
	}
	defer conn.Close()

	fmt.Printf("Connected to: %q\n", address)
}

@mabrarov mabrarov force-pushed the fix/kafka_redpanda_wait_for_mapped_port branch from e0d741f to 23904bb Compare May 21, 2025 15:15
@mabrarov mabrarov requested a review from stevenh May 21, 2025 15:17
Copy link
Contributor

@stevenh stevenh left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is now an elegant solution, thanks for all your hard work on this.

The only thing missing which @mdelapenya would pick up on is it needs docs for the new methods, sorry I always forget too as go docs are generated from the code, but testcontainers-go also has its own site, which needs manually added docs unfortunately.

@mabrarov
Copy link
Contributor Author

Hi @stevenh,

So it looks like nc is getting the right results, could you also run a test with go:

package main

import (
	"context"
	"fmt"
	"net"
	"os"
	"time"
)

func main() {
	if len(os.Args) < 2 {
		fmt.Println("Usage: go run main.go <host:port>")
		return
	}
	address := os.Args[1]

	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	var dialer net.Dialer
	conn, err := dialer.DialContext(ctx, "tcp", address)
	if err != nil {
		fmt.Printf("Dial error: %#v\n", err)
		return
	}
	defer conn.Close()

	fmt.Printf("Connected to: %q\n", address)
}

Done - updated https://github.com/mabrarov/testcontainers-go-kafka-2748/blob/master/README.md

Thank you.

@mabrarov mabrarov force-pushed the fix/kafka_redpanda_wait_for_mapped_port branch 2 times, most recently from c24b903 to 3aa43bd Compare May 21, 2025 19:11
@stevenh
Copy link
Contributor

stevenh commented May 21, 2025

Hi @stevenh,

Done - updated https://github.com/mabrarov/testcontainers-go-kafka-2748/blob/master/README.md

Thank you.

Grr, sorry we need to unpack the error a bit:

package main

import (
	"context"
	"errors"
	"fmt"
	"net"
	"os"
	"time"
)

func main() {
	if len(os.Args) < 2 {
		fmt.Println("Usage: go run main.go <host:port>")
		return
	}
	address := os.Args[1]

	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	var dialer net.Dialer
	conn, err := dialer.DialContext(ctx, "tcp", address)
	if err != nil {
		var opErr *net.OpError
		if errors.As(err, &opErr) {
			var syscallErr *os.SyscallError
			if errors.As(opErr.Err, &syscallErr) {
				fmt.Printf("Dial error: %#v\n", syscallErr)
				return
			}
			fmt.Printf("Dial error: %#v\n", opErr)
			return
		}
		fmt.Printf("Dial error: %#v\n", err)
		return
	}
	defer conn.Close()

	fmt.Printf("Connected to: %q\n", address)
}

@stevenh
Copy link
Contributor

stevenh commented May 21, 2025

@mabrarov can I also see the result of nc -vz from the remote host, the same as the go test as I'm trying to see if there is something in the go causing a different behaviour when connected to remotely compared to locally, so want to compare that with a native nc

@mabrarov mabrarov force-pushed the fix/kafka_redpanda_wait_for_mapped_port branch from 304a972 to 58cc8a8 Compare May 27, 2025 13:23
@mabrarov mabrarov requested a review from stevenh May 27, 2025 13:23
@mabrarov
Copy link
Contributor Author

mabrarov commented May 27, 2025

Hi @mdelapenya,

Regarding my comment about unstable tests in reuse_test.go:

  1. I still think that configurable timeout will be helpful (I prefer all timings to be configurable because they depend on hardware usually).
  2. The issue is not caused by too small timeout, but is caused by Docker client reporting that previously created container is running while it is stopped.

I tried main branch on Rocky Linux 9.5 with Docker Engine 28.1.1 and found that sometimes test passes:

$ go test -v -count 1 -run TestGenericContainer_stop_start_withReuse .
=== RUN   TestGenericContainer_stop_start_withReuse
2025/05/27 20:54:21 github.com/testcontainers/testcontainers-go - Connected to docker:
  Server Version: 28.1.1
  API Version: 1.49
  Operating System: Rocky Linux 9.5 (Blue Onyx)
  Total Memory: 15704 MB
  Testcontainers for Go Version: v0.38.0
  Resolved Docker Host: unix:///var/run/docker.sock
  Resolved Docker Socket Path: /var/run/docker.sock
  Test SessionID: 1d5640ddf3d79f2bbfa809fd6846fb829a379122684eb574d337788a22867adc
  Test ProcessID: 32f5ee35-3002-48e7-8fc6-99e96b390e2f
2025/05/27 20:54:21 🐳 Creating container for image nginx:alpine
2025/05/27 20:54:21 🐳 Creating container for image testcontainers/ryuk:0.11.0
2025/05/27 20:54:21 ✅ Container created: 46b4f71e77ab
2025/05/27 20:54:21 🐳 Starting container: 46b4f71e77ab
2025/05/27 20:54:21 ✅ Container started: 46b4f71e77ab
2025/05/27 20:54:21 ⏳ Waiting for container id 46b4f71e77ab image: testcontainers/ryuk:0.11.0. Waiting for: &{Port:8080/tcp timeout:<nil> PollInterval:100ms skipInternalCheck:false}
2025/05/27 20:54:21 🔔 Container is ready: 46b4f71e77ab
2025/05/27 20:54:21 ✅ Container created: cbad588cef2c
2025/05/27 20:54:21 🐳 Starting container: cbad588cef2c
2025/05/27 20:54:21 ✅ Container started: cbad588cef2c
2025/05/27 20:54:21 🔔 Container is ready: cbad588cef2c
2025/05/27 20:54:21 🐳 Stopping container: cbad588cef2c
2025/05/27 20:54:31 ✅ Container stopped: cbad588cef2c
2025/05/27 20:54:31 🐳 Starting container: cbad588cef2c
2025/05/27 20:54:31 ✅ Container started: cbad588cef2c
2025/05/27 20:54:31 🔔 Container is ready: cbad588cef2c
2025/05/27 20:54:31 ✅ Container started: cbad588cef2c
2025/05/27 20:54:31 🔔 Container is ready: cbad588cef2c
2025/05/27 20:54:31 🐳 Stopping container: cbad588cef2c
2025/05/27 20:54:42 ✅ Container stopped: cbad588cef2c
2025/05/27 20:54:42 🐳 Terminating container: cbad588cef2c
2025/05/27 20:54:42 🚫 Container terminated: cbad588cef2c
2025/05/27 20:54:42 🐳 Stopping container: cbad588cef2c
2025/05/27 20:54:42 🐳 Terminating container: cbad588cef2c
2025/05/27 20:54:42 🚫 Container terminated: cbad588cef2c
--- PASS: TestGenericContainer_stop_start_withReuse (20.86s)
PASS
ok      github.com/testcontainers/testcontainers-go     20.875s

and sometimes test fails:

$ go test -v -count 1 -run TestGenericContainer_stop_start_withReuse .
=== RUN   TestGenericContainer_stop_start_withReuse
2025/05/27 20:28:09 github.com/testcontainers/testcontainers-go - Connected to docker:
  Server Version: 28.1.1
  API Version: 1.49
  Operating System: Rocky Linux 9.5 (Blue Onyx)
  Total Memory: 15704 MB
  Testcontainers for Go Version: v0.38.0
  Resolved Docker Host: unix:///var/run/docker.sock
  Resolved Docker Socket Path: /var/run/docker.sock
  Test SessionID: bcf6e12b4cdec61c01215ade3310f5e142a1646bca0e87e7505c551c8f70a5fe
  Test ProcessID: 276c500e-c9e1-49b8-8e0d-26fcd4644951
2025/05/27 20:28:09 🐳 Creating container for image nginx:alpine
2025/05/27 20:28:09 🐳 Creating container for image testcontainers/ryuk:0.11.0
2025/05/27 20:28:09 ✅ Container created: 931b882451ca
2025/05/27 20:28:09 🐳 Starting container: 931b882451ca
2025/05/27 20:28:09 ✅ Container started: 931b882451ca
2025/05/27 20:28:09 ⏳ Waiting for container id 931b882451ca image: testcontainers/ryuk:0.11.0. Waiting for: &{Port:8080/tcp timeout:<nil> PollInterval:100ms skipInternalCheck:false}
2025/05/27 20:28:09 🔔 Container is ready: 931b882451ca
2025/05/27 20:28:09 ✅ Container created: cf711b2a8ec9
2025/05/27 20:28:09 🐳 Starting container: cf711b2a8ec9
2025/05/27 20:28:09 ✅ Container started: cf711b2a8ec9
2025/05/27 20:28:09 🔔 Container is ready: cf711b2a8ec9
2025/05/27 20:28:09 🐳 Stopping container: cf711b2a8ec9
2025/05/27 20:28:19 ✅ Container stopped: cf711b2a8ec9
2025/05/27 20:28:19 ✅ Container started: cf711b2a8ec9
2025/05/27 20:28:19 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:19 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:19 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:19 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:20 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:20 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:20 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:21 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:21 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:21 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:22 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:22 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:23 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:23 All requested ports were not exposed: port 8080/tcp is not mapped yet
2025/05/27 20:28:24 container logs (all exposed ports, [8080/tcp], were not mapped in 5s: port 8080/tcp is not mapped yet):
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2025/05/27 17:28:09 [notice] 1#1: using the "epoll" event method
2025/05/27 17:28:09 [notice] 1#1: nginx/1.27.5
2025/05/27 17:28:09 [notice] 1#1: built by gcc 14.2.0 (Alpine 14.2.0)
2025/05/27 17:28:09 [notice] 1#1: OS: Linux 5.14.0-503.40.1.el9_5.x86_64
2025/05/27 17:28:09 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 4000000:4000000
2025/05/27 17:28:09 [notice] 1#1: start worker processes
2025/05/27 17:28:09 [notice] 1#1: start worker process 30
2025/05/27 17:28:09 [notice] 1#1: start worker process 31
2025/05/27 17:28:09 [notice] 1#1: start worker process 32
2025/05/27 17:28:09 [notice] 1#1: start worker process 33
2025/05/27 17:28:09 [notice] 1#1: start worker process 34
2025/05/27 17:28:09 [notice] 1#1: start worker process 35
2025/05/27 17:28:09 [notice] 1#1: start worker process 36
2025/05/27 17:28:09 [notice] 1#1: start worker process 37

    reuse_test.go:39:
                Error Trace:    /ws/github/mabrarov/testcontainers-go/reuse_test.go:39
                Error:          Received unexpected error:
                                create container: all exposed ports, [8080/tcp], were not mapped in 5s: port 8080/tcp is not mapped yet
                Test:           TestGenericContainer_stop_start_withReuse
2025/05/27 20:28:24 🐳 Stopping container: cf711b2a8ec9
2025/05/27 20:28:24 ✅ Container stopped: cf711b2a8ec9
2025/05/27 20:28:24 🐳 Terminating container: cf711b2a8ec9
2025/05/27 20:28:24 🚫 Container terminated: cf711b2a8ec9
--- FAIL: TestGenericContainer_stop_start_withReuse (15.36s)
FAIL
FAIL    github.com/testcontainers/testcontainers-go     15.375s
FAIL

Note that there is no "Starting container: cf711b2a8ec9" message before the last "Container started: cf711b2a8ec9" message.

Here are screenshots from debugger for another run and similar fail of the same test (in order of screenshot creation):

Screenshot from 2025-05-27 20-59-14
Screenshot from 2025-05-27 20-59-22

I suspect Docker Daemon caches state of container or uses asynchronous logic when container is stopped which causes Docker client used by Testcontainers for Go to report about container running.

It seems to be another issue - not related to this pull request (example of the same issue on another pull request) - which requires dedicated investigation (including Docker Engine bug-tracker review) and workaround / fix.

Thank you.

@mdelapenya
Copy link
Member

@mabrarov

I still think that configurable timeout will be helpful (I prefer all timings to be configurable because they depend on hardware usually).

Working on this now

@mdelapenya
Copy link
Member

@mabrarov here it is: #3176, I'd appreciate a review in there 🙏

@mabrarov mabrarov force-pushed the fix/kafka_redpanda_wait_for_mapped_port branch from d2b148b to 80aa134 Compare May 30, 2025 22:13
mabrarov added 3 commits May 31, 2025 01:15
…which is not possible due to Kafka is not started at that point of time) in container post start hook which prepares configuration for Kafka (fix for testcontainers#2748).

Signed-off-by: Marat Abrarov <[email protected]>
…them (which is not possible due to Redpanda is not started at that point of time) in container post start hook before preparing configuration for Redpanda which requires completion of port mapping (fix for testcontainers#2748).

Signed-off-by: Marat Abrarov <[email protected]>
…ainer with Redpanda (which is Linux based) to run correctly when host OS is Windows.

Signed-off-by: Marat Abrarov <[email protected]>
@mabrarov mabrarov force-pushed the fix/kafka_redpanda_wait_for_mapped_port branch from 80aa134 to 456836b Compare May 30, 2025 22:22
@mabrarov
Copy link
Contributor Author

Hi @mdelapenya,

I opened #3177 for the issue described in #3165 (comment). Sorry, but I failed to find time to make a deeper investigation (like checking Docker Engine issues or checking if some sort of caching happens inside Testcontainers for Go).

Thank you.

@mabrarov mabrarov force-pushed the fix/kafka_redpanda_wait_for_mapped_port branch from 456836b to f2c8549 Compare May 31, 2025 00:38
Copy link
Member

@mdelapenya mdelapenya left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

Thanks @mabrarov for your enormous work in this PR, addressing all the suggestions from the review and also contributing with a deep research on the port mapping issue.

In fact, this PR helped us to take decisions on the upcoming PRs, which will remove the readiness check for mapped ports, among other improvements.

Thanks for your time and dedication to make Testcontainers better 🙇

@mdelapenya mdelapenya self-assigned this Jun 3, 2025
@mdelapenya mdelapenya added the bug An issue with the library label Jun 3, 2025
@mdelapenya mdelapenya changed the title fix(kafka,redpanda): deadlock with remote Docker Host feat(kafka,redpanda): support for waiting for mapped ports without external checks Jun 3, 2025
@mdelapenya
Copy link
Member

@mabrarov I've renamed the PR title so that it's even clearer what we do when reading the release notes. Please let me know what you think

@mdelapenya mdelapenya merged commit d72fc00 into testcontainers:main Jun 3, 2025
205 checks passed
@mdelapenya
Copy link
Member

Merged, thank you so much!

mdelapenya added a commit to mdelapenya/testcontainers-go that referenced this pull request Jun 3, 2025
* main: (236 commits)
  feat(kafka,redpanda): support for waiting for mapped ports without external checks (testcontainers#3165)
  chore: bump ryuk to 0.12.0 (testcontainers#3195)
  feat!: add options when creating RawCommand (testcontainers#3168)
  chore(deps)!: bump github.com/docker/docker from 28.1.1+incompatible to 28.2.2+incompatible (testcontainers#3194)
  feat(couchbase): adding auth to couchbase initCluster functions to support container reuse (testcontainers#3048)
  chore(deps): bump github.com/containerd/containerd/v2 (testcontainers#3167)
  docs(options): refactor options layout in modules (testcontainers#3163)
  fix(ci): do not run sonar for Testcontainers Cloud (testcontainers#3166)
  chore(ci): do not fail fast in the Testcontainers Cloud run (testcontainers#3164)
  feat: support adding wait strategies as functional option (testcontainers#3161)
  fix(etcd): expose ports for the etcd nodes (testcontainers#3162)
  fix(wait): no port to wait for (testcontainers#3158)
  feat: add more functional options for customising containers (testcontainers#3156)
  docs(redpanda): update sasl authentication option to use scram sha 256 (testcontainers#3126)
  chore(deps): bump mkdocs-include-markdown-plugin from 6.2.2 to 7.1.5 (testcontainers#3137)
  chore(deps): bump github.com/shirou/gopsutil/v4 from 4.25.1 to 4.25.4 (testcontainers#3133)
  chore(deps): bump github.com/docker/docker from 28.0.1+incompatible to 28.1.1+incompatible (testcontainers#3152)
  feat(memcached): add memcached module (testcontainers#3132)
  fix(etcd): single node etcd cluster access (testcontainers#3149)
  feat(valkey): add TLS support for Valkey (testcontainers#3131)
  ...
mdelapenya added a commit to mdelapenya/testcontainers-go that referenced this pull request Jun 3, 2025
* main:
  fix: workaround for moby/moby#50133 when reusing container in testcontainers.GenericContainer. (testcontainers#3197)
  feat(kafka,redpanda): support for waiting for mapped ports without external checks (testcontainers#3165)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug An issue with the library
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: Regression for Kafka
3 participants