Docker and Testbed
Diagnose container startup, ports, waits, compose overlays, and local environment failures.
Abstract
Diagnose container startup, ports, waits, compose overlays, and local environment failures.
This page covers the failures that happen before the run can even be trusted: containers not starting, ports colliding, waits never resolving, or the local testbed not matching the scenario.
Audience
These pages help users recover from common failures without opening an issue.
Common Causes
- The compose stack did not start cleanly.
- A port mapping collided with another local process.
- A wait condition never became true.
- The local environment and the testbed configuration diverged.
- The OpenTelemetry bootstrap image was not built or could not be pulled.
- The init container did not populate the bootstrap volume.
- The SUT image does not have a shell for the current
node-wrapscript. - The configured Node binary path does not match the SUT image.
First Checks
- Confirm the containers are healthy before the test starts.
- Check for port collisions and stale containers.
- Verify the wait conditions and any startup dependencies.
- Compare the local configuration with the CI configuration if the failure only appears in one place.
- Confirm the bootstrap image exists locally or is reachable from CI.
- Confirm the generated overlay mounted
/blackbox-otelandbin/node-wrapinto the SUT.
Bootstrap Image Checks
In local development, the bootstrap image is commonly tagged as blackbox-otel-bootstrap:local. In packaged or CI usage, the image may come from a registry or from BLACKBOX_OTEL_IMAGE.
The image must contain:
/blackbox-otel/bootstrap.cjs/blackbox-otel/node_modules//blackbox-otel/bin/node-wrap/blackbox-otel/bin/real-node
If the image is missing, malformed, or built for the wrong architecture, the SUT may start without instrumentation or fail before it becomes healthy.
Node Binary Path Checks
The default instrumentation path shadows /usr/local/bin/node. That matches common official Node images, but it is still an assumption.
If your image puts Node somewhere else, configure the testbed to shadow the correct path. If your image is distroless, the current shell wrapper is not enough because there is no /bin/sh to execute it.
Recovery
- Restart the testbed from a clean state.
- Remove stale containers or volumes if the setup expects a fresh run.
- Rebuild or repull the bootstrap image.
- Fix the compose overlay, Node binary path, or port mapping that caused the failure.
- Re-run the sample project before trying the full system again.
What To Report If It Still Fails
- The compose or testbed command.
- The failing container or port.
- The wait condition or startup step that timed out.
- Any logs that show why the testbed never reached a ready state.
Figure Placeholder
Caption: The generated testbed overlay and the failures that can happen before the first span is captured: image, volume, wrapper, debug port, and wait strategy.
Slot: <!-- TODO: insert Docker/testbed troubleshooting screenshot or compose overlay diagram here -->