The mbutil Docker image provides mb-util as its entrypoint. Mount a volume at /data containing your input file(s); output is written there as well.
docker pull wifidb/mbutil# MBTiles → PMTiles
docker run -v $(pwd):/data wifidb/mbutil world.mbtiles world.pmtiles
# PMTiles → MBTiles
docker run -v $(pwd):/data wifidb/mbutil world.pmtiles world.mbtiles
# MBTiles → disk (tile directory)
docker run -v $(pwd):/data wifidb/mbutil world.mbtiles tiles/
# Disk (tile directory) → MBTiles
docker run -v $(pwd):/data wifidb/mbutil tiles/ world.mbtiles
# PMTiles → disk
docker run -v $(pwd):/data wifidb/mbutil world.pmtiles tiles/
# Disk → PMTiles
docker run -v $(pwd):/data wifidb/mbutil tiles/ world.pmtiles# PMTiles → MBTiles with tile deduplication
docker run -v $(pwd):/data wifidb/mbutil --do_compression world.pmtiles world.mbtiles
# Dump metadata to terminal
docker run -v $(pwd):/data wifidb/mbutil world.pmtiles dumps
docker run -v $(pwd):/data wifidb/mbutil world.mbtiles dumpsFor large conversions (multi-GB files), the PMTiles writer uses a temporary file during processing. By default this goes to /tmp inside the container. To ensure enough disk space and better I/O performance, you can mount a host directory at /tmp:
docker run \
-v $(pwd):/data \
-v /mnt/fast-disk/tmp:/tmp \
wifidb/mbutil world.mbtiles world.pmtilesIf your input and output are on different paths, mount them separately and use absolute paths:
docker run \
-v /source/tiles:/source \
-v /output/tiles:/output \
wifidb/mbutil /source/world.mbtiles /output/world.pmtilesdocker run -v $(pwd):/data wifidb/mbutil:v0.4.0 world.mbtiles world.pmtiles# Initialize submodules first (required for PMTiles support)
git submodule update --init --recursive
docker build -t mbutil .
docker run -v $(pwd):/data mbutil world.mbtiles world.pmtiles