# Docker Installation

> Run Resume Matcher with Docker: one docker run with the published image, or clone the repo and docker compose up. Then open localhost:3000.
- **Section**: Setup
- **URL**: https://resumematcher.fyi/docs/docker-installation/

---

## Prerequisites

Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) or a current Docker Engine + Docker Compose setup.

## Quick Start

The fastest way to run Resume Matcher is the prebuilt image. It ships as a single container image on Docker Hub, where it's a [Docker-Sponsored Open Source](https://hub.docker.com/r/srbhr/resume-matcher) image, and on GitHub Container Registry. Both are built for `linux/amd64` and `linux/arm64`.

```bash
# Docker Hub
docker run --name resume-matcher -p 3000:3000 \
  -v resume-data:/app/backend/data \
  srbhr/resume-matcher:latest

# or GitHub Container Registry
docker run --name resume-matcher -p 3000:3000 \
  -v resume-data:/app/backend/data \
  ghcr.io/srbhr/resume-matcher:latest
```

Then open `http://localhost:3000/settings` to connect a model. The `resume-data` volume holds your database and settings, so your data survives container upgrades. The database is SQLite and needs no setup; to keep your data in PostgreSQL instead, see [Use PostgreSQL Instead of SQLite](/docs/postgresql/). Pin a version (for example `:1.3.0`) if you want repeatable deployments.

To run it from a clone of the repo with Docker Compose instead:

```bash
git clone https://github.com/srbhr/Resume-Matcher.git
cd Resume-Matcher
docker compose up -d
```

The checked-in Docker flow exposes Resume Matcher on a single public origin.

## Default URLs

| Surface | URL |
|---------|-----|
| App | `http://localhost:3000` |
| Settings | `http://localhost:3000/settings` |
| Health | `http://localhost:3000/api/v1/health` |
| API docs | `http://localhost:3000/docs` |

In the default Docker setup, the UI and public API routes are served from the same origin.

## Common Commands

With Docker Compose:

```bash
docker compose up -d
docker compose logs -f
docker compose down
```

## Change the Public Port

Use the `PORT` environment variable instead of editing the compose file:

```bash
PORT=4000 docker compose up -d
```

Then use:

- `http://localhost:4000`
- `http://localhost:4000/settings`
- `http://localhost:4000/api/v1/health`
- `http://localhost:4000/docs`

## Provider Configuration

After the containers are up, open Settings and choose your provider:

- OpenAI
- Anthropic
- OpenRouter
- Google Gemini
- DeepSeek
- Groq
- Azure AI Foundry
- Ollama
- Any OpenAI-compatible server (llama.cpp, vLLM, LM Studio)
- ChatGPT plan, signed in from a browser on the machine that runs the container

The Claude plan option needs a local install: the Claude Code CLI isn't in the image. See [Bring Your Own AI Key](/docs/bring-your-own-ai-key/) for each provider's settings. For local-model usage, follow [Docker + Ollama](/docs/docker-ollama/).

## Troubleshooting

**The app does not load**

Check logs:

```bash
docker compose logs -f
```

**You changed the port**

Route all app, settings, health, and docs URLs through the same public port.

## Next Steps

- [Docker + Ollama](/docs/docker-ollama/)
- [Features](/docs/features/)