***
title: Set up a runner in your restricted network
plan: beta
updated: 2025-11-21T00:00:00.000Z
slug: docs/monitoring-your-api/runners/set-up-a-runner-in-your-network
max-toc-depth: 2
----------------
Private API Monitoring is available with [Postman Basic, Professional, and Enterprise plans](https://www.postman.com/pricing/). To enable Private API Monitoring in your Enterprise team, contact your Postman Customer Success Manager.
Set up a runner in your internal network to monitor your organization's internal APIs and send the test results to Postman. To get started, you can learn how to [start the runner](#start-a-runner). Then you can learn how to [containerize the runner using Docker](#start-a-runner-in-your-cloud-network) when you're ready to set up the runner in your cloud network, like a virtual private cloud.
## How a runner works
Once set up and running in your internal network, the runner works in the background to poll Postman for upcoming monitor runs. Postman recommends installing the Postman CLI and starting the runner on a stable machine in the same internal network as the internal APIs you want to monitor.
Postman identifies a runner using its ID, and a runner uses the ID and key to authenticate with Postman. Any runner started through the Postman CLI using the same ID and key is an *instance* of that runner. Each instance runs in the background, increasing the number of pollers available to run the monitor. Learn how to [scale your runner instances](/docs/monitoring-your-api/runners/scale-runners/).
When a monitor runs in your internal network, the following happens:
1. The Postman CLI fetches the monitor run configuration with relevant Postman elements, like the associated collection and environment, from the Postman cloud.
2. The collection's tests run in your internal network.
3. The Postman CLI sends the test results back to the Postman cloud, making them available in the [monitor results](/docs/monitoring-your-api/viewing-monitor-results/).
Your Postman plan gives you a limited number of requests that can be run by your Postman Monitors each month. Requests run by Private API Monitoring count toward this same limit. Learn more about [resource usage in Postman](/docs/billing/resource-usage/#monitoring-usage).
## Start a runner
To start a runner, install the Postman CLI and then run the `postman runner start` command. This creates a new instance of the runner that polls Postman for upcoming monitor runs.
1. [Install the Postman CLI](/docs/postman-cli/postman-cli-installation/). You can run the following command to install the Postman CLI using npm:
```bash
npm install -g postman-cli
```
2. Run the Postman CLI `runner` command with the runner ID and key.
```bash
postman runner start --id --key
```
Once you're ready to set up the runner in your cloud network, learn how to [containerize the runner using Docker](#start-a-runner-in-your-cloud-network).
Learn more about the [`postman runner start` command](/docs/postman-cli/postman-cli-options/#postman-runner-start) and its supported options.
## Start a runner in your cloud network
{/* Dockerfile is correct spelling */}
{/* vale Vale.Spelling = NO */}
To start a runner in your cloud network, such as a virtual private cloud, you can containerize the runner using Docker. Use the following example to create your own Dockerfile that installs the Postman CLI and starts the runner with the `postman runner start` command. Learn more about the [`postman runner start` command](/docs/postman-cli/postman-cli-options/#postman-runner-start) and its supported options to help you configure your Dockerfile.
For extra governance and security, you can [configure your runner to use a proxy server](/docs/monitoring-your-api/runners/proxy-server/overview/) that routes traffic and evaluates requests from the runner.
{/* vale Vale.Spelling = YES */}
{/* "postman-runner" refers to the Docker image tag name */}
{/* vale postman-style-guide.BrandedTerm = NO */}
{/* Dockerfile is correct spelling */}
{/* vale Vale.Spelling = NO */}
1. Use the following example Dockerfile to install the latest version of the Postman CLI and start the runner without any extra options:
```dockerfile
FROM --platform=linux/amd64 node:22-bookworm-slim
# Install ca-certificates for SSL/TLS connections
RUN apt-get update && apt-get install -y ca-certificates && rm -rf /var/lib/apt/lists/*
# Install Postman CLI
RUN npm install -g postman-cli
# Create a non-root user
RUN groupadd -r postman && useradd -r -g postman -u 1001 postman
# Set working directory for runner
WORKDIR /app
# Create Postman directories with proper permissions
RUN mkdir -p /home/postman/.postman/logs && \
chown -R postman:postman /home/postman/.postman && \
chown -R postman:postman /app
# Switch to non-root user
USER postman
# Run the Postman runner
CMD ["sh", "-c", "postman runner start --id ${POSTMAN_RUNNER_ID} --key ${POSTMAN_RUNNER_KEY}"]
```
Learn more about [installing the Postman CLI](/docs/postman-cli/postman-cli-installation/) and the [`postman runner start` command](/docs/postman-cli/postman-cli-options/#postman-runner-start) to help you configure your Dockerfile.
2. Build an image using your Dockerfile. Tag the image with "postman-runner".
```bash
docker build -t postman-runner .
```
3. Run the container using the image tagged with “postman-runner”. Provide the runner ID and key.
```bash
docker run --rm -e POSTMAN_RUNNER_ID="" -e POSTMAN_RUNNER_KEY="" postman-runner
```
{/* vale Vale.Spelling = YES */}
{/* vale postman-style-guide.BrandedTerm = YES */}
You can use the Postman CLI to trigger monitor runs for internal APIs within your CI/CD pipeline. Then your team can use your Postman tests to automatically catch regressions and configuration issues during your deployment process. Learn more about [running a monitor with the Postman CLI](/docs/postman-cli/postman-cli-run-monitor/).