Run Processwire inside Docker container

22 September 2025

Short explanation how to configure docker-compose.yml and Dockerfile to run Processwire web site inside Docker container.

Create docker-compose.yml and Dockerfile inside root of your project.

docker-compose.yml:

version: "3.9"

services:
  web:
    build: .
    container_name: processwire_web
    ports:
      - "8080:80"
    volumes:
      - ./site:/var/www/html
    depends_on:
      - db

  db:
    image: mariadb:10.6
    container_name: processwire_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: processwire
      MYSQL_USER: pwuser
      MYSQL_PASSWORD: pwpass
    volumes:
      - ./db_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: processwire_phpmyadmin
    restart: always
    ports:
      - "8081:80"
    environment:
      - PMA_HOST=db
      - PMA_USER=pwuser
      - PMA_PASSWORD=pwpass

Dockerfile:

FROM php:8.2-apache

# Install required system packages and PHP extensions for ProcessWire
RUN apt-get update && apt-get install -y \
    libfreetype6-dev \
    libjpeg-dev \
    libpng-dev \
    libzip-dev \
    zlib1g-dev \
    libonig-dev \
    unzip \
    git \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) pdo_mysql mysqli gd mbstring zip \
    && apt-get clean && rm -rf /var/lib/apt/lists/*

# Enable Apache mod_rewrite
RUN a2enmod rewrite

WORKDIR /var/www/html

Download ProcessWire from https://processwire.com/download/ and extract into the site/ folder.

Then in terminal run this:

docker-compose up -d --build

After successful build you can start with web at localhost:8080

During setup choose host: db, username: pwuser, pass: pwpass (don't mess with host localhost or similar)