How to Run holehe in Docker: Installation Guide and Environment Considerations

You can run holehe in Docker by building the provided Dockerfile and executing the container with your target email address as an argument.

The holehe repository by megadose provides a ready-to-use containerization setup for this email reconnaissance tool. Running holehe in Docker isolates its Python dependencies and provides a consistent runtime environment across different host systems.

Building the holehe Docker Image

The repository includes a Dockerfile at the repository root that implements a clean, minimal build process. According to the megadose/holehe source code, the image construction follows these stages:

  1. Base layer: Uses python:3-slim for a lightweight foundation with pip support
  2. Dependency resolution: Copies and installs requirements.txt via pip install --no-cache-dir
  3. Source integration: Copies the holehe/ package directory preserving the internal module structure
  4. Privilege reduction: Runs as non-root user (UID 1000)
  5. Entry point configuration: Exposes holehe as the default command via the console script defined in setup.py

To build the image:


# Clone the repository

git clone https://github.com/megadose/holehe.git
cd holehe

# Build the Docker image

docker build -t holehe .

The build process pulls exact dependency versions specified in setup.py, including requests, beautifulsoup4, and click.

Running holehe in Docker: Basic Usage

Once built, invoke holehe through the container with standard CLI arguments. The tool's entry point is defined in holehe/core.py as implemented in megadose/holehe.

Single email check

docker run --rm holehe user@example.com

Using environment variables

docker run --rm -e HOLEHE_EMAIL=user@example.com holehe $HOLEHE_EMAIL

Persisting output to host filesystem

mkdir -p reports
docker run --rm -v $(pwd)/reports:/out holehe user@example.com > reports/result.txt

Controlling concurrency

docker run --rm holehe --threads 5 user@example.com

Critical Environment Considerations for holehe Docker Deployment

Network access requirements

Holehe requires outbound HTTP/HTTPS connectivity to query service APIs. Verify host firewall rules and Docker network policies permit external traffic. The container makes no inbound connections.

Rate limiting and abuse prevention

Service-specific modules in holehe/modules/ (organized by category: software/, shopping/, programming/, etc.) each target different platforms. Many implement request throttling. Running multiple container instances simultaneously from one IP risks triggering:

  • HTTP 429 (Too Many Requests) responses
  • Temporary IP bans
  • CAPTCHA challenges

Mitigation: Stagger container runs or reduce --threads value.

Resource allocation

Holehe is CPU-light but connection-intensive. For batch operations, set Docker resource limits:

docker run --rm --cpus="1.0" --memory="512m" holehe target@email.com

Input handling security

Avoid embedding email addresses in image layers. Pass sensitive targets via:

  • Command-line arguments (ephemeral, not stored)
  • Environment variables (runtime-only)
  • Mounted files (with --rm to prevent container persistence)

Python version compatibility

The Dockerfile pins Python 3. Altering the base image to Python 4 (when released) or downgrading to Python 2 will break dependency resolution in setup.py.

Output persistence patterns

Method Command Use Case
Redirect to mounted volume docker run -v $(pwd)/out:/data holehe ... > /data/out.txt Batch processing with file collection
Pipe to host process docker run holehe ... | tee report.json Real-time monitoring
Capture container logs docker logs <container> Debugging with --rm disabled

Relevant Source Files for Docker Operation

Understanding these files helps troubleshoot container behavior:

File Path Function
Dockerfile Image build instructions, dependency installation, entry point
setup.py Package metadata and console script declaration (holehe=holehe.core:main)
holehe/core.py CLI argument parsing and execution orchestration
holehe/modules/*/module.py Individual service check implementations loaded at runtime
requirements.txt Pinned dependency versions installed during build

Summary

  • Build the holehe Docker image with docker build -t holehe . from the repository root
  • Execute reconnaissance with docker run --rm holehe <email> passing standard CLI flags
  • Ensure outbound network connectivity for service queries
  • Manage rate limits by controlling thread count and container concurrency
  • Persist results using volume mounts rather than container filesystem storage
  • Run as non-root user (configured in Dockerfile) for security hardening

Frequently Asked Questions

Does holehe require any special Docker networking configuration?

No special networking is required. The default bridge network suffices. Ensure your host allows outbound TCP/443 to target services. No ports need exposure via -p flags since holehe initiates all connections.

How do I update holehe when running in Docker?

Rebuild the image periodically: docker build --no-cache -t holehe . after git pull from the megadose/holehe repository. This pulls updated modules from holehe/modules/ and refreshed dependencies per setup.py.

Can I run holehe against multiple emails in one container invocation?

Yes. Pass multiple space-separated addresses: docker run --rm holehe user1@example.com user2@example.com. Alternatively, mount a file containing emails and use shell redirection within an overridden entry point if automating bulk checks.

Why does the Dockerfile use a non-root user?

The image runs as UID 1000 to reduce attack surface. This follows container security best practices and prevents privilege escalation if a vulnerability were exploited in holehe's dependencies.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →