Skip to main content
phoss SMP is published to Docker Hub for all three storage backends. This is the fastest way to get a running instance.

Available images

ImageBackendDocker Hub
phelger/phoss-smp-xmlXML (file-based)https://hub.docker.com/r/phelger/phoss-smp-xml
phelger/phoss-smp-sqlSQL (MySQL/PostgreSQL/Oracle/DB2)https://hub.docker.com/r/phelger/phoss-smp-sql
phelger/phoss-smp-mongodbMongoDBhttps://hub.docker.com/r/phelger/phoss-smp-mongodb
All images are based on tomcat:10.1-jdk21 and expose port 8080 internally.
The legacy phelger/smp image contains old XML binary releases and SNAPSHOTs. Use the phoss-smp-xml image for current releases.

Quick start

The fastest way to verify the image works:
docker run -d --name phoss-smp -p 8888:8080 phelger/phoss-smp-xml:latest
Open http://localhost:8888 in your browser after the container starts.
The images ship with no application.properties file. Without configuration the SMP cannot register with the SML or sign responses. Always supply a configuration before connecting to production infrastructure.

Production deployment

1

Create a configuration directory

Create a local directory to hold application.properties and your keystore file:
mkdir -p /opt/phoss-smp/config
cp application.properties /opt/phoss-smp/config/
cp smp.p12 /opt/phoss-smp/config/
See Prerequisites for keystore requirements.
2

Create a data directory

The XML backend stores participant data on disk. Create a persistent directory:
mkdir -p /opt/phoss-smp/data
Set webapp.datapath = /data in your application.properties to match the mount point inside the container.
3

Run the container with volumes

Mount both directories and pass the config file path:
docker run -d \
  --name phoss-smp \
  -p 8888:8080 \
  -e "CONFIG_FILE=/config/application.properties" \
  -v /opt/phoss-smp/config:/config \
  -v /opt/phoss-smp/data:/data \
  phelger/phoss-smp-xml:latest
4

Verify the container is running

Check logs to confirm a clean startup:
docker logs phoss-smp
Then open http://localhost:8888 in your browser.

Environment variables

You can pass configuration via environment variables on the docker run command line instead of mounting a config file.
VariableDescription
CONFIG_FILEAbsolute path to application.properties inside the container (v6.x+).
WEBAPP_DATAPATHOverride webapp.datapath — the data storage directory.
SML_SMPIDOverride sml.smpid — your SMP identifier.
SMP_BACKENDOverride smp.backend — set to xml, sql, or mongodb.
Example using only environment variables (useful for quick testing):
docker run --name phoss-smp \
  -p 8888:8080 \
  -v .:/a \
  -e WEBAPP_DATAPATH=/a \
  -e SML_SMPID=TEST1 \
  -e SMP_BACKEND=xml \
  phelger/phoss-smp-xml:latest
This approach is for testing only. A production deployment requires a full application.properties with a valid keystore.

Custom configuration with a child Dockerfile

If you prefer to bake configuration into a custom image, create a child Dockerfile that inherits from the official image:
# Dockerfile
FROM phelger/phoss-smp-xml

# Point Tomcat to the configuration file mounted at /config
ENV CATALINA_OPTS="$CATALINA_OPTS -Dconfig.file=/config/application.properties"
Build and run:
docker build --pull -t phoss-smp-with-config -f Dockerfile .
docker run -d \
  --name phoss-smp-with-config \
  -p 8888:8080 \
  -v /opt/phoss-smp/config:/config \
  phoss-smp-with-config
If you change the /config mount point, update the paths in your application.properties accordingly (for example, smp.keystore.path).

Port mapping

All official images expose port 8080 (Tomcat’s default HTTP port). The -p flag maps container port 8080 to a host port:
-p 8888:8080   # host port 8888 → container port 8080
-p 80:8080     # host port 80 → container port 8080
Tomcat logs are written to /usr/local/tomcat/logs inside the container. There is no single catalina.out; the file is rotated daily as catalina.out.yyyy-mm-dd.

Container management

docker logs phoss-smp

ARM64 support

A separate ARM64 image is published for Apple Silicon and ARM-based servers:
docker run --name phoss-smp \
  -p 8888:8080 \
  -v .:/a \
  -e WEBAPP_DATAPATH=/a \
  -e SML_SMPID=TEST1 \
  -e SMP_BACKEND=xml \
  phelger/phoss-smp-xml-arm64:latest

Building images from source

If you need to build your own image from the official Dockerfiles, see Building from source.

Build docs developers (and LLMs) love