Skip to main content
Generic packs allow you to install all server content (jars, mods, plugins, configs, etc.) from a zip or tgz archive file. This is useful for applying CurseForge modpacks that are missing a server start script and/or Forge installer.

Single Generic Pack

To install content from a single archive file, set GENERIC_PACK to the container path or URL of the archive.
environment:
  GENERIC_PACK: https://example.com/modpack.zip

Multiple Generic Packs

To apply multiple generic packs together, use GENERIC_PACKS with a comma-separated list of archive file paths and/or URLs.
environment:
  GENERIC_PACKS: |
    https://cdn.example.org/configs.zip
    https://cdn.example.org/mods.zip

Using Prefix and Suffix

To avoid repetition, each entry will be prefixed by GENERIC_PACKS_PREFIX and suffixed by GENERIC_PACKS_SUFFIX. Example:
environment:
  GENERIC_PACKS: |
    configs-v9.0.1
    mods-v4.3.6
  GENERIC_PACKS_PREFIX: https://cdn.example.org/
  GENERIC_PACKS_SUFFIX: .zip
This expands to:
  • https://cdn.example.org/configs-v9.0.1.zip
  • https://cdn.example.org/mods-v4.3.6.zip

Performance Options

Skip Update Check

For large generic packs, updates can be time-consuming. Skip the update check by setting:
SKIP_GENERIC_PACK_UPDATE_CHECK: "true"

Force Update

Force the generic pack(s) to be re-applied:
FORCE_GENERIC_PACK_UPDATE: "true"

Skip Checksum

The most time-consuming portion of updates is SHA1 checksum generation. Skip it with:
SKIP_GENERIC_PACK_CHECKSUM: "true"
Skipping checksum validation means the container won’t detect if pack contents have changed.

Disabling Specific Mods

To disable specific mods (useful for conflicts between multiple generic packs), use GENERIC_PACKS_DISABLE_MODS.
environment:
  GENERIC_PACKS_DISABLE_MODS: |
    mod1.jar
    mod2.jar
    conflicting-mod.jar

Complete Example

1

Create docker-compose.yml

Set up a server with multiple generic packs:
services:
  minecraft:
    image: itzg/minecraft-server
    environment:
      EULA: "TRUE"
      TYPE: FORGE
      VERSION: "1.20.1"
      GENERIC_PACKS: |
        base-pack-v2.1.0
        performance-mods-v1.3.2
        custom-configs-v3.0.5
      GENERIC_PACKS_PREFIX: https://cdn.myserver.com/packs/
      GENERIC_PACKS_SUFFIX: .zip
      GENERIC_PACKS_DISABLE_MODS: |
        duplicate-mod.jar
        problematic-mod.jar
      SKIP_GENERIC_PACK_CHECKSUM: "false"
    volumes:
      - minecraft-data:/data
    ports:
      - "25565:25565"

volumes:
  minecraft-data:
2

Start the server

docker compose up -d
The container will:
  1. Download all three pack files
  2. Extract them to /data
  3. Disable the specified mods
  4. Start the server
3

Monitor logs

docker compose logs -f
Watch for successful pack application and server startup.

Environment Variables Reference

VariableDescriptionDefault
GENERIC_PACKSingle archive file URL or pathNone
GENERIC_PACKSComma/newline separated list of archivesNone
GENERIC_PACKS_PREFIXPrefix added to each pack entryNone
GENERIC_PACKS_SUFFIXSuffix added to each pack entryNone
SKIP_GENERIC_PACK_UPDATE_CHECKSkip update checking for performancefalse
FORCE_GENERIC_PACK_UPDATEForce re-application of packsfalse
SKIP_GENERIC_PACK_CHECKSUMSkip SHA1 checksum generationfalse
GENERIC_PACKS_DISABLE_MODSSpace/newline separated mod filenames to disableNone
Generic packs are applied before other mod installation methods, allowing you to layer additional mods on top.

Build docs developers (and LLMs) love