Run Processwire inside Docker container
22 September 2025
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)