Skip to content

[Bug]: Explicitely mapped ports break default readiness hook #2652

@robinvanderstraeten-klarrio

Description

Testcontainers version

0.32.0

Using the latest Testcontainers version?

Yes

Host OS

Linux (WSL)

Host arch

x86_64

Go version

1.22.3

Docker version

Client: Docker Engine - Community
 Version:           26.0.1
 API version:       1.45
 Go version:        go1.21.9
 Git commit:        d260a54
 Built:             Thu Apr 11 10:53:21 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.0.1
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.9
  Git commit:       60b9add
  Built:            Thu Apr 11 10:53:21 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.31
  GitCommit:        e377cd56a71523140ca6ae87e30244719194a521
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Docker info

Client: Docker Engine - Community
 Version:    26.0.1
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.13.1
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.26.1
    Path:     /usr/libexec/docker/cli-plugins/docker-compose
  scan: Docker Scan (Docker Inc.)
    Version:  v0.23.0
    Path:     /usr/libexec/docker/cli-plugins/docker-scan

Server:
 Containers: 7
  Running: 1
  Paused: 0
  Stopped: 6
 Images: 32
 Server Version: 26.0.1
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: cgroupfs
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 Swarm: inactive
 Runtimes: runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: e377cd56a71523140ca6ae87e30244719194a521
 runc version: v1.1.12-0-g51d5e94
 init version: de40ad0
 Security Options:
  seccomp
   Profile: builtin
 Kernel Version: 5.15.153.1-microsoft-standard-WSL2
 Operating System: Ubuntu 22.04.4 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 6
 Total Memory: 15.62GiB
 Name: VD011420
 ID: 5f7f091e-64fd-40bb-bfdf-ad87e9ae09ec
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Username: robinvanderstraeten352
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support

What happened?

Since version 0.32.0 of testcontainers, creating a container with an explicit port mapping in ExposedPorts (for instance "4443:4443/tcp") no longer works. The container starts correctly, but a newly introduced readiness check fails. It incorrectly parses the input given in ExposedPorts and concludes that the container did not start correctly. For context, I'm talking about the logic here.
I'm aware that testcontainers creates a port mapping for you, but sometimes you need to know the port before the container starts. Here's an example snippet:

      var port = "4443/tcp"
      var hostPort = "4443"
      req := testcontainers.GenericContainerRequest{
          ContainerRequest: testcontainers.ContainerRequest{
              Image:        "fsouza/fake-gcs-server",
              ExposedPorts: []string{fmt.Sprintf("%s:%s", hostPort, port)},
              Cmd:          []string{"-scheme", "http", "-public-host", fmt.Sprintf("localhost:%s", hostPort)},
              WaitingFor:   wait.ForHTTP("/storage/v1/b").WithPort(nat.Port(port)),
          },
          Started: true,
      }

Relevant log output

failed to start container: all exposed ports, [4443:4443/tcp], were not mapped in 5s: port 4443:4443/tcp is not mapped yet

Additional information

I have made a fork with a suggestion for a fix. robinvanderstraeten-klarrio@193ab06

If this is the right approach I'll submit a PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugAn issue with the library

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions