This guide uses Docker Compose to run WooCommerce as a WordPress plugin. WooCommerce requires WordPress - it is not standalone software.
Current Version: WooCommerce 10.5 (released February 3, 2026)
WordPress Requirement: WordPress 6.4+
For Docker installation, see Docker.
Bitnami maintains an official WordPress Docker image. Install WooCommerce via plugin.
version: '3.8'
services:
mariadb:
image: mariadb:11.4
container_name: woocommerce-db
restart: unless-stopped
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress-password-change-me
MYSQL_ROOT_PASSWORD: mariadb-root-password-change-me
volumes:
- mariadb_data:/var/lib/mysql
networks:
- woocommerce-net
wordpress:
image: bitnami/wordpress:latest
container_name: woocommerce
restart: unless-stopped
depends_on:
- mariadb
ports:
- "8080:8080"
environment:
- WORDPRESS_DATABASE_HOST=mariadb
- WORDPRESS_DATABASE_PORT=3306
- WORDPRESS_DATABASE_NAME=wordpress
- WORDPRESS_DATABASE_USER=wordpress
- WORDPRESS_DATABASE_PASSWORD=wordpress-password-change-me
- WORDPRESS_DATABASE_ROOT_PASSWORD=mariadb-root-password-change-me
- WORDPRESS_USERNAME=admin
- WORDPRESS_PASSWORD=admin-password-change-me
- WORDPRESS_EMAIL=admin@example.com
- WORDPRESS_FIRST_NAME=Store
- WORDPRESS_LAST_NAME=Admin
- WORDPRESS_BLOG_TITLE=My WooCommerce Store
- ALLOW_EMPTY_PASSWORD=no
volumes:
- wordpress_data:/bitnami/wordpress
- woocommerce_data:/bitnami/wordpress/wp-content/plugins/woocommerce
networks:
- woocommerce-net
wpcli:
image: bitnami/wordpress-cli:latest
container_name: woocommerce-wpcli
depends_on:
- wordpress
volumes:
- wordpress_data:/bitnami/wordpress
networks:
- woocommerce-net
entrypoint: /bin/bash
command: -c "wp plugin install woocommerce --activate && wp wc tool run install_pages --user=admin"
volumes:
mariadb_data:
wordpress_data:
woocommerce_data:
networks:
woocommerce-net:
docker compose up -d
Wait 1-2 minutes for WordPress to initialize, then the WP-CLI container will install WooCommerce automatically.
Access at http://YOUR-SERVER:8080
http://YOUR-SERVER:8080/wp-adminadminadmin-password-change-me (change immediately!)After login, navigate to WooCommerce → Settings to complete the store setup wizard.
Uses the official WordPress Docker image from Docker Hub.
version: '3.8'
services:
db:
image: mariadb:11.4
container_name: woocommerce-db
restart: unless-stopped
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress-password-change-me
MYSQL_ROOT_PASSWORD: mariadb-root-password-change-me
volumes:
- db_data:/var/lib/mysql
networks:
- woocommerce-net
wordpress:
image: wordpress:latest
container_name: woocommerce
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress-password-change-me
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
- wp_plugins:/var/www/html/wp-content/plugins
networks:
- woocommerce-net
wpcli:
image: wordpress:cli
container_name: woocommerce-wpcli
depends_on:
- wordpress
user: "33:33"
volumes:
- wordpress_data:/var/www/html
- wp_plugins:/var/www/html/wp-content/plugins
networks:
- woocommerce-net
entrypoint: /bin/bash
command: -c "sleep 10 && wp plugin install woocommerce --activate && wp wc tool run install_pages --user=admin"
volumes:
db_data:
wordpress_data:
wp_plugins:
networks:
woocommerce-net:
# Wait for WordPress to be ready
docker compose up -d
# Install WooCommerce via WP-CLI
docker compose run --rm wpcli wp plugin install woocommerce --activate
# Or install via admin panel after accessing WordPress
Build a custom WordPress image with WooCommerce pre-installed.
FROM wordpress:latest
# Install WooCommerce during build
RUN curl -o /tmp/woocommerce.zip https://downloads.wordpress.org/plugin/woocommerce.latest-stable.zip \
&& unzip /tmp/woocommerce.zip -d /usr/src/wordpress/wp-content/plugins/ \
&& rm /tmp/woocommerce.zip
version: '3.8'
services:
db:
image: mariadb:11.4
restart: unless-stopped
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress-password-change-me
MYSQL_ROOT_PASSWORD: mariadb-root-password-change-me
volumes:
- db_data:/var/lib/mysql
wordpress:
build: .
restart: unless-stopped
depends_on:
- db
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress-password-change-me
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
volumes:
db_data:
wordpress_data:
docker compose build
docker compose up -d
Then activate WooCommerce via WordPress admin or:
docker compose exec wordpress wp plugin activate woocommerce
http://YOUR-SERVER:8080/wp-admin# Payment gateways
docker compose run --rm wpcli wp plugin install woocommerce-gateway-stripe --activate
docker compose run --rm wpcli wp plugin install woocommerce-paypal-payments --activate
# Shipping
docker compose run --rm wpcli wp plugin install woocommerce-services --activate
# Security
docker compose run --rm wpcli wp plugin install wordfence --activate
For production, use a reverse proxy (Nginx/Traefik) with Let’s Encrypt:
# Add to docker-compose.yml
services:
traefik:
image: traefik:v2.10
command:
- "--providers.docker=true"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=your@email.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- letsencrypt:/letsencrypt
# Backup database
docker compose exec db mysqldump -u wordpress -p wordpress > backup.sql
# Backup WordPress files (including WooCommerce)
tar -czf wordpress-backup.tar.gz wordpress_data/