Skip to main content

Run Norconex Crawler with Docker

This page covers the recommended Docker workflow for Norconex Crawler v4.

Image locationsโ€‹

Official images are published to both registries:

  • Docker Hub: norconex/crawler-web, norconex/crawler-fs, norconex/crawler-web-playwright
  • GitHub Container Registry (GHCR): ghcr.io/norconex/crawler-web, ghcr.io/norconex/crawler-fs, ghcr.io/norconex/crawler-web-playwright

Registry pages:

Tags and release channelsโ€‹

Stable releases are published to both registries with these tags:

  • latest
  • major version (example: 4)
  • minor version (example: 4.1)
  • full version (example: 4.1.2)

Pre-releases (betas and release candidates) are published to the same registries, but only under their exact version tag โ€” for example norconex/crawler-web:4.0.0-beta-1. They never take latest, 4, or 4.1, so those moving tags always resolve to the newest stable build.

An edge tag is also published from the main branch to GHCR only:

  • ghcr.io/norconex/crawler-web:edge
  • ghcr.io/norconex/crawler-fs:edge
  • ghcr.io/norconex/crawler-web-playwright:edge

Use stable tags for production, reserve pre-release tags for evaluation, and use edge only for testing against unreleased changes.

During the v4 beta

Version 4.0.0 has not been released yet, so there is no latest tag on Docker Hub. Until it ships, replace :latest in the examples below with the current pre-release tag โ€” the download page always shows it.

Quick run (docker run)โ€‹

Web crawlerโ€‹

docker run --rm \
-v "${PWD}:/opt/norconex/crawler/configs" \
-v "${PWD}/logs:/opt/norconex/crawler/logs" \
-e COLLECTOR_CONFIG_FILE=my-web-crawl.yaml \
norconex/crawler-web:latest

File system crawlerโ€‹

docker run --rm \
-v "${PWD}:/opt/norconex/crawler/configs" \
-v "${PWD}/logs:/opt/norconex/crawler/logs" \
-e COLLECTOR_CONFIG_FILE=my-fs-crawl.yaml \
norconex/crawler-fs:latest

Docker Compose examplesโ€‹

Compose: web crawlerโ€‹

Create docker-compose.web.yml:

services:
crawler-web:
image: norconex/crawler-web:latest
environment:
COLLECTOR_CONFIG_FILE: my-web-crawl.yaml
volumes:
- ./configs:/opt/norconex/crawler/configs
- ./logs:/opt/norconex/crawler/logs

Run:

docker compose -f docker-compose.web.yml up

Compose: file system crawlerโ€‹

Create docker-compose.fs.yml:

services:
crawler-fs:
image: norconex/crawler-fs:latest
environment:
COLLECTOR_CONFIG_FILE: my-fs-crawl.yaml
volumes:
- ./configs:/opt/norconex/crawler/configs
- ./logs:/opt/norconex/crawler/logs
- ./data:/data

Use paths under /data in your crawler config, for example:

startReferences:
- /data

Run:

docker compose -f docker-compose.fs.yml up

Playwright image and remote browserโ€‹

Use crawler-web-playwright when your web crawl uses Playwright-based rendering. A remote Selenium Grid or compatible remote browser is typically used alongside it.

Example pull:

docker pull norconex/crawler-web-playwright:latest

Compose: crawler-web-playwright + Selenium browserโ€‹

Create docker-compose.web-playwright-selenium.yml:

services:
selenium:
image: selenium/standalone-chromium:latest
shm_size: 2gb
ports:
- "4444:4444"

crawler-web-playwright:
image: norconex/crawler-web-playwright:latest
depends_on:
- selenium
environment:
COLLECTOR_CONFIG_FILE: my-web-crawl.yaml
volumes:
- ./configs:/opt/norconex/crawler/configs
- ./logs:/opt/norconex/crawler/logs

In configs/my-web-crawl.yaml, use WebDriverFetcher and point remoteURL to the Selenium service:

fetchers:
- class: WebDriverFetcher
browser: CHROME
remoteURL: http://selenium:4444/wd/hub

Run:

docker compose -f docker-compose.web-playwright-selenium.yml up

Notes:

  • The crawler-web-playwright image includes Playwright and browser-automation dependencies.
  • The selenium service name is resolvable from the crawler container on the same compose network.

Compose: crawler-web-playwright + Selenium Grid (hub + node)โ€‹

Create docker-compose.web-playwright-grid.yml:

services:
selenium-hub:
image: selenium/hub:latest
ports:
- "4444:4444"

selenium-node-chromium:
image: selenium/node-chromium:latest
shm_size: 2gb
depends_on:
- selenium-hub
environment:
SE_EVENT_BUS_HOST: selenium-hub
SE_EVENT_BUS_PUBLISH_PORT: 4442
SE_EVENT_BUS_SUBSCRIBE_PORT: 4443

crawler-web-playwright:
image: norconex/crawler-web-playwright:latest
depends_on:
- selenium-hub
- selenium-node-chromium
environment:
COLLECTOR_CONFIG_FILE: my-web-crawl.yaml
volumes:
- ./configs:/opt/norconex/crawler/configs
- ./logs:/opt/norconex/crawler/logs

In configs/my-web-crawl.yaml, point remoteURL to the hub service:

fetchers:
- class: WebDriverFetcher
browser: CHROME
remoteURL: http://selenium-hub:4444/wd/hub

Run:

docker compose -f docker-compose.web-playwright-grid.yml up

Committers in Docker vs ZIPโ€‹

Docker images already include external committer JARs, so no additional committer installation is required.

For ZIP-based installs, external committers must be downloaded separately (nx-committer-<name>-<version>.zip) and copied to the crawler lib/ directory.

Tipsโ€‹

  • Keep config files in a dedicated configs/ folder and mount it read-only when possible.
  • Persist logs by mounting /opt/norconex/crawler/logs.
  • Pin a version tag for repeatable production deployments.