Swapnanil Sharmah
12/26/2025, 4:41 PMMarvin
12/26/2025, 4:41 PMMarvin
12/26/2025, 4:46 PMprefect.yaml
- Run prefect deploy --all at container runtime (not during docker build)
Here’s a Dockerfile you can use to perform the deployment step in CI/CD. It assumes you have prefect.yaml and your flow code in the image.
Basic “deployment runner” image (no docker build/push steps in prefect.yaml)
# Deploys all flows defined in prefect.yaml at container startup
FROM python:3.11-slim
WORKDIR /app
# Install your project deps and Prefect
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt && \
pip install --no-cache-dir prefect
# Add your flows and prefect.yaml
COPY . .
# IMPORTANT: Do NOT create deployments at build time.
# Creating deployments requires PREFECT_API_URL and will create duplicates.
# Run them at container startup instead:
ENTRYPOINT ["prefect"]
CMD ["deploy", "--all"]
Run it (CI or locally):
docker build -t my-org/prefect-deployer:latest .
docker run --rm \
-e PREFECT_API_URL="<http://your-prefect-server:4200/api>" \
-e PREFECT_API_KEY="${PREFECT_API_KEY}" \
my-org/prefect-deployer:latest
If your prefect.yaml uses Docker build/push steps
- Install the plugin and provide Docker access inside the container.
# Deploys all flows defined in prefect.yaml that use docker build/push steps
FROM python:3.11-slim
WORKDIR /app
# Install system packages for docker CLI if you need to build/push images from steps
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates curl gnupg && \
rm -rf /var/lib/apt/lists/*
# Install Prefect and docker plugin
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt && \
pip install --no-cache-dir prefect prefect-docker
# Copy your project
COPY . .
# If your steps need the Docker CLI, install it or run in a Docker-enabled CI runner
# and mount the host docker socket when running:
# docker run -v /var/run/docker.sock:/var/run/docker.sock ...
ENTRYPOINT ["prefect"]
CMD ["deploy", "--all"]
Notes and best practices
- Define all deployments in prefect.yaml. Then prefect deploy --all will register them.
- Don’t run prefect deploy during the Docker build; do it at runtime (as shown).
- Set PREFECT_API_URL (and PREFECT_API_KEY if auth is enabled) when running the container.
- This image only registers deployments; it does not run a worker. You’ll still need a Prefect worker (e.g., Docker, Kubernetes) pointing at your self-hosted server to execute the runs created by those deployments.
If you share:
- What work pool type you’re targeting (Docker, Kubernetes, Process, etc.)
- Whether your prefect.yaml needs to build/push images
I can tailor the Dockerfile and an example prefect.yaml to match your setup.Swapnanil Sharmah
12/27/2025, 2:11 AMMarvin
12/27/2025, 2:13 AMMarvin
12/27/2025, 2:14 AMprefect deploy is running interactively and there’s no prefect.yaml yet. Two easy ways to make this fully non-interactive in CI/Docker:
Option A (recommended): commit a prefect.yaml and deploy with prompts disabled
- Add a prefect.yaml to your repo that defines your deployments
- Run with PREFECT_CLI_PROMPT=false so no prompts are shown
Example:
# CI or docker run
export PREFECT_API_URL="<http://your-prefect-server:4200/api>"
export PREFECT_API_KEY="***"
export PREFECT_CLI_PROMPT=false
prefect deploy --all
Option B: provide all required flags and disable prompts
- If you’re deploying a single entrypoint without a prefect.yaml, pass all required flags and set `PREFECT_CLI_PROMPT=false`:
export PREFECT_API_URL="<http://your-prefect-server:4200/api>"
export PREFECT_API_KEY="***"
export PREFECT_CLI_PROMPT=false
prefect deploy ./flows/my_flow.py:my_flow \
--name my-deployment \
--pool my-work-pool
Why this works
- The “Would you like to save configuration…” prompt only appears when:
- Running in interactive mode, and
- There’s no prefect.yaml present
- Setting PREFECT_CLI_PROMPT=false disables prompts globally.
- Having a prefect.yaml present prevents that specific question entirely.
If you’d like, share your work pool type (Docker/Kubernetes/Process) and I can sketch a minimal prefect.yaml so prefect deploy --all runs silently in your Dockerfile/CI.