Portal Community
  Private registry authentication: For private registries, configure Docker daemon credentials on the host — the Docker node uses the host's credential store (~/.docker/config.json or the configured credential helper). The node itself does not accept registry username/password fields.

When to Use

Configuration

Connection

FieldTypeDefaultDescription
dockerHoststringunix:///var/run/docker.sockDocker daemon socket path or TCP endpoint.
connectionTypestringunixsocketOne of: unixsocket, tcp, tcptls.
tlsCertPathstringTLS certificate directory. Required for tcptls. optional
timeoutSecondsint300Increase for large images on slow networks. optional

Operation Fields

FieldTypeBadgeDescription
RepositorystringrequiredImage reference to pull. Examples: nginx:1.25, myregistry.example.com/app:v2.0, nginx@sha256:593dac….
  Timeout: Large images can take minutes to pull. The default timeoutSeconds of 30 is insufficient for images over ~500 MB. Set timeoutSeconds to at least 300 for production image pulls.

Sample Configuration

{
  "resource": "image",
  "operation": "pull",
  "connection": {
    "dockerHost": "unix:///var/run/docker.sock",
    "connectionType": "unixsocket",
    "timeoutSeconds": 300
  },
  "Repository": "myregistry.example.com/app:v2.3.1"
}

Validation Errors

Error CodeConditionResolution
MISSING_INPUTRepository field is empty.Provide a valid image reference including tag or digest.
NOT_FOUNDImage or tag does not exist in the registry.Verify the image name and tag exist in the target registry.
AUTH_FAILEDRegistry requires authentication and credentials are not available on the host.Configure docker login on the host, or add credentials to the Docker credential store.
CONFIG_ERRORConnection settings are malformed.Verify dockerHost and connectionType.
DOCKER_API_ERRORPull failed mid-stream (network error, disk full, etc.).Check Docker daemon logs; ensure sufficient disk space on the host.

Output

Success Port

FieldTypeDescription
statusstring"ok" when pull completes successfully.
resourcestring"image"
operationstring"pull"
repositorystringThe image reference that was pulled.
pullStatusstringFinal status message from the Docker daemon (e.g., "Status: Downloaded newer image for nginx:1.25").

Error Port

Fires when the pull fails. Output contains status: "error", errorCode, and errorMessage.

Sample Output

{
  "status": "ok",
  "resource": "image",
  "operation": "pull",
  "repository": "myregistry.example.com/app:v2.3.1",
  "pullStatus": "Status: Downloaded newer image for myregistry.example.com/app:v2.3.1"
}

Expression Reference

ExpressionReturns
{{ $output.status }}"ok" on success — use in downstream condition to gate deployment.
{{ $output.repository }}The image reference that was pulled — pass to container/create.
{{ $output.pullStatus }}Human-readable pull result from Docker daemon.

Node Policies & GuardRails

PolicyEnforcement
Never expose Docker daemon TCP without TLSUse tcptls for remote Docker hosts. Plain tcp is blocked in production GuardRail profiles.
Store TLS certificates in Credentials ManagerReference tlsCertPath via {{ $credentials.dockerTlsCertPath }}.
Never interpolate user input into the Repository fieldImage references must come from trusted workflow variables or fixed configuration — not raw user-supplied strings.
Pin images by digest for production deploymentsUse repo@sha256:digest format instead of mutable tags to guarantee immutable deploys.
Always handle the error portRegistry unavailability or authentication failures will route to the error port — wire it to alerting nodes.
Increase timeoutSeconds for large imagesDefault timeout of 30s is insufficient for images > 500 MB. Set at least 300s in production pull workflows.

Examples

Example 1 — CI/CD Pre-Pull Before Deploy

Pull the application image to the target host, then immediately proceed to create and start the container. The pull node's success output feeds the image reference to container/create.

// Step 1 — image/pull
{
  "resource": "image",
  "operation": "pull",
  "Repository": "{{ $vars.releaseImage }}",
  "connection": { "timeoutSeconds": 300 }
}

// Step 2 — container/create (uses same image ref)
{
  "resource": "container",
  "operation": "create",
  "Image": "{{ $node['image-pull'].output.repository }}"
}

Example 2 — Multi-Host Cache Warming

Use a loop node to iterate over a list of Docker host endpoints and pull the same image to each in sequence before the rolling deployment begins.

// Loop item provides the host endpoint:
{
  "resource": "image",
  "operation": "pull",
  "connection": {
    "dockerHost": "{{ $loopItem.endpoint }}",
    "connectionType": "tcptls",
    "tlsCertPath": "{{ $credentials.dockerTlsCertPath }}"
  },
  "Repository": "myapp:v3.0.0"
}

Example 3 — Digest-Pinned Pull

Pull an image using its exact content-addressable digest to guarantee that the exact same image layers are retrieved regardless of tag mutations.

{
  "resource": "image",
  "operation": "pull",
  "connection": { "timeoutSeconds": 300 },
  "Repository": "nginx@sha256:593dac25b7733ffb7afe1a72649a43e574778bf025ad60514ef40f6b5d606247"
}