What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Yes—you can run a Forge, Fabric, NeoForge, or packaged modpack server as a Docker container and manage it from Portainer. The reliable pattern is a Portainer Stack using the itzg/minecraft-server image, a persistent host directory or named volume mounted at /data, and host port 25565 mapped to the container. Portainer controls the Compose deployment; it does not replace the Minecraft server image.

The steps below create a repeatable deployment, preserve your world when the container is recreated, keep modpack credentials out of the Compose file where possible, and provide checks for the most common startup and connection failures.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

What you need before creating the server

Use a Linux machine that stays online and has a wired or otherwise reliable network connection. Minecraft Java Edition servers are assumed here; Bedrock uses a different server implementation and configuration.

Requirement Practical guidance
Operating system A current 64-bit Linux distribution with a supported Docker installation. A desktop Linux PC, small home server, or virtual private server can work.
Docker Docker Engine and the Compose functionality used by Portainer Stacks.
Portainer Portainer CE running on the same Docker host, with its persistent portainer_data volume.
CPU and RAM Allocate memory for the operating system, Docker, and Java. The image defaults to 1 GB; most substantial modpacks need at least 4 GB, and some need more.
Storage Fast, persistent storage with room for the server files, world growth, backups, and downloaded mods.
Network Inbound TCP port 25565 reachable by players. Internet hosting may also require a router rule, firewall rule, and a solution for CGNAT.
Pack information The exact Minecraft version, loader (Fabric, Forge, or NeoForge), Java requirement, server-pack format, and any API key required by the distribution.

Do not start by copying a client-only mod list. A server pack or the pack author’s server instructions is the authoritative list of files and versions to install.

#1 Best Overall
Cable Matters 10Gbps Snagless Cat 6 Ethernet Cable, 25ft, Black | 24 AWG Bare Copper, Gold-Plated RJ45, PoE++, 550MHz Bandwidth, Cat6 Cable, Ethernet Cord
  • High-Performance Connectivity: This Cat 6 ethernet cable is designed for superior performance, with a 24 AWG copper wire core. It provides universal connectivity as an ethernet cord for LAN network components such as PCs, servers, printers, routers, and more, ensuring reliable and fast network connections
  • Advanced Cat6 Technology: Experience Cat6 performance with higher bandwidth at a Cat5e price. This network cable is future-proof, ready for 10-Gigabit Ethernet and backwards compatible with any existing Cat 5 cable network. It meets or exceeds Category 6 performance according to the TIA/EIA 568-C.2 standard
  • Reliable Wired Network Solution: Known variously as a Cat6 network cable, ethernet cable Cat 6, or Cat 6 data/LAN cable, this RJ45 cable offers a more secure and reliable connection than wireless networks. It's ideal for internet connections that demand consistency and security
  • Durable and Secure Design: The connectors of this ethernet cable feature gold-plated contacts and strain-relief boots for enhanced durability. Bare copper conductors not only improve cable performance but also comply with communication cable specifications
  • High-Speed Data Transfer: With up to 550 MHz bandwidth, this ethernet cord is ideal for server applications, cloud computing, video surveillance, and streaming high-definition video. It also supports Power over Ethernet (PoE, PoE+, PoE++) for powering devices like IP cameras, VoIP phones, and wireless access points, ensuring fast and reliable network performance.

How Portainer, Docker, and the Minecraft image fit together

Docker runs the Minecraft process in a container. A Compose file declares the image, environment variables, port mapping, restart behavior, and storage. Portainer presents that Compose file as a Stack, lets you deploy or redeploy it, and provides container status and logs in the browser.

The image downloads the requested Minecraft server and loader during startup, then keeps the server’s working files under /data. Mounting /data to storage outside the container is the persistence boundary: worlds, configuration, permissions, downloaded mods, and server properties survive a container replacement.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Portainer’s HTTPS interface normally uses port 9443. Port 8000 is optional and is used for certain Edge features; it is not required for a local Docker environment. The Minecraft service normally listens on port 25565.

Install Docker and Portainer on the host

Install Docker

Install Docker Engine using the supported instructions for your Linux distribution. Confirm that the daemon is running and that your account can use Docker, either directly or through the docker group. Test with:

docker version
 docker compose version

Remove the accidental leading space before docker compose version if your shell treats it specially; the command itself is simply docker compose version. If Compose is not available, install the current Compose plugin supplied for your distribution.

Run Portainer CE

Create Portainer’s persistent data volume, then start the Portainer Server container:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Sale
Ultra Clarity Cables Cat6 Ethernet Cable 100 FT 10Gbps Long Cable, Black | Outdoor Indoor High Speed, Gold Plated RJ45 LAN 500MHz Internet Cat6 Cable for Computer, Router, Modem, PS4 5, Xbox, Gaming
  • High Performance Cat6 Cable - The Cat6 ethernet cables 100ft supports frequencies of up to 500 MHz and high-speed 10GB internet connection for LAN network applications such as PCs,computer servers,printers,routers,switch boxes,network media players,NAS,VoIP phones and more, while remaining fully backward compatible with your existing network.
  • Outdoor&Indoor Ethernet Cable - The cat 6 ethernet patch cable features 8 solid copper conductors 24 AWG. Each of the 4 unshielded twisted pairs (UTP) are separated by a PE cross insulation to isolates pairs and prevent crosstalk and covered by a 5.8mm PVC jacket with RJ45 connectors and gold-plated contacts. The molded strain relief boots help avoid snags that will damage your cables. They are molded for flexibility and resist common wear and tear.
  • Lan Cable with RJ45 - UTP(Unshielded Twisted Pair) patch cable with RJ45 gold-plated Connectors, this cat6 cable support Cat8 and Cat7 network and provides performance of up to 500 MHz 10Gbps and is suitable for 10BASE-T, 100BASE-TX (Fast Ethernet), 1000BASE-T/1000BASE-TX (Gigabit Ethernet) and 10GBASE-T (10-Gigabit Ethernet)
  • High Quality Control - are designed with extremely well-matched components for outstanding uniform impedance and very low return loss, providing lower crosstalk, and a higher signal-to-noise ratio. Each Cat 6 internet cable 6 ft goes through rigorous testing to ensure a secure wired internet connection with exceptional speed and reliability.
  • Support – Cat6 Ethernet cable with CM grade PVC jacket complies with TIA/EIA 568-C.2, is ETL verified and RoHS compliant. If an item is defective or breaks within a year, we will issue a replacement. For questions or concerns please contact our friendly, USA-based customer Support team.
docker volume create portainer_data
docker run -d 
  -p 8000:8000 
  -p 9443:9443 
  --name portainer 
  --restart=always 
  -v /var/run/docker.sock:/var/run/docker.sock 
  -v portainer_data:/data 
  portainer/portainer-ce:lts

Port 8000 can be omitted when you do not use Edge functionality. The Docker socket gives Portainer control over the local Docker environment, so protect the host and Portainer administrator account as carefully as you would protect root access.

Open https://HOST:9443, where HOST is the server’s LAN address or DNS name. Accept the browser warning if you are using Portainer’s initial self-signed certificate, create the first administrator account, and select the local Docker environment.

Create the Minecraft Stack in Portainer

Use a persistent host directory

On the host, create a directory that will hold the server data and make sure Docker can read and write it:

sudo mkdir -p /srv/minecraft/minecraft-data
sudo chown -R 1000:1000 /srv/minecraft/minecraft-data

The exact ownership needed can vary with your host and security policy. If the container reports permission errors, inspect the directory permissions and the container’s documented user settings instead of deleting the directory.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Paste the Compose definition

In Portainer, choose Stacks, select Add stack, enter a name such as minecraft, choose the Web editor, and paste this baseline:

services:
  mc:
    image: itzg/minecraft-server:latest
    pull_policy: daily
    tty: true
    stdin_open: true
    restart: unless-stopped
    ports:
      - '25565:25565'
    environment:
      EULA: 'TRUE'
      TYPE: 'FABRIC'
      VERSION: '1.21.1'
      MEMORY: '4G'
    volumes:
      - /srv/minecraft/minecraft-data:/data

latest, Fabric, version 1.21.1, and 4G are example values, not universal requirements. Replace them with the pack’s supported values. Pin a tested image tag rather than following latest blindly when stability matters; a daily pull can introduce a new image between redeployments.

Rank #3
Jadaol Cat6/Cat6A Ethernet Cable 50FT Flat with Clips 10Gbps Network, White | 1FT 3FT 5FT 10FT 15FT 20FT 25FT 30FT 35FT 50FT 60FT 75FT 100FT 150FT 200FT LAN Patch Cable for Router, Modem, Switch, Gaming
  • Cat 6 performance at a Cat5e price but with higher bandwidth
  • High Performance Cat6, 30 AWG, RJ45 Ethernet Patch Cable provides universal connectivity for LAN network components such as PCs,computer servers,printers,routers,switch boxes,network media players,NAS,VoIP phones
  • Jadaol cat6 standard cable support Cat8 and Cat7 network and provides performance of up to 250 MHz 10Gbps and is suitable for 10BASE-T, 100BASE-TX (Fast Ethernet), 1000BASE-T/1000BASE-TX (Gigabit Ethernet) and 10GBASE-T (10-Gigabit Ethernet)
  • UTP(Unshielded Twisted Pair) patch cable with RJ45 gold-plated Connectors and are made of 100% bare copper wire, ensure minimal noise and interference
  • The unique flat cable shape allows for a cleaner and safer installation. You can easily and seamlessly make the cable run along walls, follow edges & corners or even make it completely invisible by sliding it under a carpet.

The image requires EULA: 'TRUE' to start. The mapping 25565:25565 publishes the container’s Minecraft port on the same port of the Docker host. The restart policy brings the service back after a daemon restart or an ordinary crash, but it does not fix a configuration that repeatedly fails during startup.

Deploy and watch the first startup

  1. Scroll to the bottom of the Stack editor and select Deploy the stack.
  2. Open Containers, select the Minecraft container, and open Logs.
  3. Wait while the image downloads the server files, loader, and any requested mods, then generates the initial world. The first run can take substantially longer than later restarts.
  4. Look for a clear server-ready message before attempting to connect. A container that is “running” while its process is repeatedly restarting is not ready.

For equivalent command-line inspection, use docker compose ps, docker compose logs -f, and docker compose stop from the directory containing your Compose file.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Choose the loader or modpack mode correctly

The image supports several installation modes. The mode must match both the server pack and the clients joining it.

Mode Typical configuration What to verify Operational implication
Fabric TYPE: 'FABRIC' with a compatible VERSION Fabric loader version, Fabric API, and whether every listed mod has a server build for that Minecraft version Usually lightweight, but every client must use matching loader and mod versions.
Forge TYPE: 'FORGE' with the pack’s Minecraft version and loader settings Forge build, Java compatibility, and the pack’s server files Many large packs have higher CPU and memory requirements.
NeoForge The NeoForge mode and version variables documented for the selected image release NeoForge build, Minecraft version, and the pack author’s server procedure Do not substitute a Forge build simply because the mod names look similar.
Modrinth distribution The image’s Modrinth download variables and a server-compatible project or pack Project version, loader, dependencies, and whether a separate server pack is supplied Updates should be performed by changing the declared pack version, not by manually replacing random files.
CurseForge distribution TYPE: 'AUTO_CURSEFORGE' plus the page or file URL and required authentication Server-pack availability, API key, Minecraft version, Java requirement, and memory Automatic CurseForge installation is the preferred path for new deployments where supported.

Variable names and supported values can change with the image. Check the current image documentation for the selected mode before deploying a new pack. Manual CurseForge server-pack handling is documented as deprecated for new deployments; use the automatic mode when the pack and image support it.

Deploying a CurseForge pack safely

Most CurseForge packs need considerably more memory than the baseline example. The image documentation states that the default is 1 GB and recommends setting MEMORY to at least 4G for most automatic CurseForge deployments. Treat that as a starting point, not a guarantee: monitor garbage-collection pauses, tick time, and host memory pressure.

Set the automatic mode and provide the pack’s page URL or downloadable file URL using the variables required by the current image documentation. Keep the API key out of a publicly shared Stack definition:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Sale
UGREEN Cat 8 Ethernet Cable 6FT, High Speed Braided 40Gbps 2000Mhz Network Cord Cat8 RJ45 Shielded Indoor Heavy Duty LAN Cables Compatible with Gaming PC PS5 PS4 PS3 Xbox Modem Router 6FT
  • 40 Gbps 2000 Mhz High Speed: The Cat 8 ethernet cable support max. 40 Gbps data transfer and 2000 MHz Brandwith, ideal for gaming and streaming, greatly improving upload and download speed, sound, image and resolution quality
  • Excellent Anti-interference: The ethernet cable comes with 4 shielded foiled twisted pairs (F/FTP), pure copper core and gold-plated RJ45 connector, reducing interference, noise and crosstalk, making network speed faster and more stable
  • Marvelous Durability: Internet cable wrapped with quality cotton braided cord, which makes the LAN cable stronger and more durable. The test proves that this internet cable can be bent at least 10000 times without broken, very suitable for long-term use
  • PoE Supported: All lengths of ethernet cord can support the PoE power supply function except 65ft. You don't need additional power supply when installing a PoE camera, which is very convenient and safe
  • Wide Compatibility: With the RJ45 Connector, network cable can be perfectly compatible with computers, laptops, modems, routers, PS5, X-Box and other networking devices. It can also be fully backward compatible with Cat7, Cat6e, Cat6, Cat5e, Cat5
  • For a small private deployment, define the key through Portainer’s environment-variable interface or a protected .env file with restrictive permissions.
  • For a more controlled deployment, store it as a Docker Secret and use the image’s documented file-based variable mechanism.
  • Never commit the key to a Git repository, paste it into screenshots, or include it in support requests.

If the pack requires a server-pack download rather than the ordinary client project, use that server package. A client ZIP often contains files that should not be installed on a dedicated server and may omit required startup metadata.

Set Java, memory, and version compatibility

A modded server can fail before loading a single mod when the Java runtime does not match the pack. Choose an image tag or Java variant compatible with the pack’s stated Java major version. Do not “solve” a Java error by changing several unrelated variables at once; first identify the required Minecraft and Java versions from the pack documentation and then make the smallest matching change.

Set memory in the Compose environment, for example:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
MEMORY: '6G'

Leave headroom for the host operating system, Portainer, Docker, file cache, and backups. Giving Java all available RAM can cause the host to swap or kill the container. If the host has 8 GB total, a 6G heap may be too aggressive once the operating system and other services are included.

Networking: local play, LAN play, and Internet access

Confirm the container is listening

Portainer’s container details should show the published mapping 25565:25565. On the host, check listeners with your distribution’s socket tool, then test from a second machine on the same LAN using the host’s private address and port 25565. Local testing separates Docker configuration from router and Internet problems.

Open the host firewall

If a host firewall is enabled, allow inbound TCP 25565 only from the networks that should reach the server. For a private LAN, restrict the source range where practical. Avoid opening Portainer’s administration port to the entire Internet; use a VPN, a restricted firewall rule, or an authenticated reverse proxy managed by someone who understands the security implications.

Best Value
MONK CABLES | CAT6 Plenum Cable 1000ft | UTP, 23AWG, 550MHz | DSX-8000 Certified | Most Certified Cable of The Whole Market (Blue)
  • 👌 𝗠𝗜𝗟𝗜𝗧𝗔𝗥𝗬-𝗚𝗥𝗔𝗗𝗘 𝗤𝗨𝗔𝗟𝗜𝗧𝗬 -> 𝟭𝟬𝟬% 𝗚𝗨𝗔𝗥𝗔𝗡𝗧𝗘𝗘𝗗!: Each & every of our cable is individually tested with a 𝐃𝐒𝐗-𝟖𝟎𝟎𝟎 𝐂𝐀𝐁𝐋𝐄 𝐂𝐄𝐑𝐓𝐈𝐅𝐈𝐄𝐑 to ensure customer satisfaction, the most highest & consistent quality & compliance with 568.2C standards
  • 💪 𝗛𝗘𝗔𝗩𝗬-𝗗𝗨𝗧𝗬 𝗖𝗢𝗡𝗦𝗧𝗥𝗨𝗖𝗧𝗜𝗢𝗡, 𝗥𝗘𝗠𝗔𝗥𝗞𝗔𝗕𝗟𝗘 𝗣𝗘𝗥𝗙𝗢𝗥𝗠𝗔𝗡𝗖𝗘 & 𝗦𝗨𝗣𝗘𝗥-𝗗𝗨𝗥𝗔𝗕𝗟𝗘: Our cable produces the strongest signal, along with the best conductivity, when compared to any other cable of the whole market | Our cable is an outstanding choice for 10 gigabit ethernet | RoHS certified | REACH certified | ISO 9001:2015 certified
  • 🤝 𝗛𝗜𝗚𝗛𝗘𝗦𝗧 𝗖𝗢𝗣𝗣𝗘𝗥 𝗖𝗢𝗡𝗧𝗘𝗡𝗧 𝗢𝗙 𝗧𝗛𝗘 𝗪𝗛𝗢𝗟𝗘 𝗠𝗔𝗥𝗞𝗘𝗧: Copper & aluminium mix ensures the most perfect price-to-performance & durability ratio for customers | Monk Cables enable customers to reap the rewards of CCA through huge savings
  • ❤️ 𝗕𝗥𝗜𝗧𝗧𝗟𝗘-𝗙𝗥𝗘𝗘, 𝗘𝗔𝗦𝗬-𝗧𝗢-𝗪𝗢𝗥𝗞-𝗪𝗜𝗧𝗛 & 𝗖𝗢𝗠𝗣𝗔𝗧𝗜𝗕𝗟𝗘 𝗪𝗜𝗧𝗛 𝗜𝗡𝗗𝗢𝗢𝗥 𝗨𝗦𝗔𝗚𝗘: Our cable comes packaged in a hassle-free & tangle-free easy-pull box | Running "ft" count after every foot makes measuring the cable extremely easy | Fire-retardant, sunlight-resistant & weather-proof plenum jacket fulfils rigorous fire protection safety standards for usage in plenum air spaces which typically are above drop ceilings or below raised floors
  • ✅ 𝗧𝗛𝗘 𝗢𝗡𝗟𝗬 𝗖𝗔𝗧𝟲 𝗣𝗟𝗘𝗡𝗨𝗠 𝗖𝗔𝗕𝗟𝗘, 𝗬𝗢𝗨'𝗟𝗟 𝗘𝗩𝗘𝗥 𝗡𝗘𝗘𝗗 𝗧𝗢 𝗕𝗨𝗬!: Ridiculously easy 30 days return policy | 24/7 super-friendly customer support, with 100% satisfaction guarantee | If you ever face any issues while using our product, we will replace it right away, no questions asked!

Forward the router port

For players outside your home, forward TCP 25565 on the router to the Docker host’s fixed LAN address. Reserve that address with a DHCP reservation so the rule does not break after a reboot. Some providers use carrier-grade NAT, which prevents inbound forwarding even when the router appears correctly configured. In that case, request a reachable public address or use a network design that provides inbound access; changing Compose ports alone will not bypass CGNAT.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Players connect to the reachable address and port, such as example-address:25565. A DNS name is optional. Do not publish a private LAN address to Internet players.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Preserve worlds and configuration across recreates

The bind mount in the example keeps all server state in /srv/minecraft/minecraft-data. Recreating the container, pulling a new image, or redeploying the Stack does not remove that directory. A named volume works as well:

volumes:
  minecraft_data:

services:
  mc:
    volumes:
      - minecraft_data:/data

Named volumes are convenient when Docker should manage storage. A host directory is easier to inspect, include in filesystem backups, and move to another host. Pick one deliberately and do not alternate between an empty path and the real data path during redeployments.

Before changing Minecraft versions, loaders, or major modpack releases:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Stop the Stack cleanly from Portainer.
  2. Copy the entire /data directory, including the world, configuration, mods, and server properties, to backup storage.
  3. Record the current image tag, Compose variables, and pack version.
  4. Deploy the change and watch logs for migration errors.
  5. Keep the backup until players have loaded the world successfully and you have confirmed inventories, dimensions, and permissions.

RCON is enabled by default by the image to support graceful shutdown and save coordination. If you set a password, prefer the image’s RCON_PASSWORD_FILE mechanism with a Docker Secret rather than placing the password directly in YAML.

Update the server without losing the world

A Stack update changes the container definition; it does not automatically make an incompatible world or mod list safe. Use this sequence:

  1. Read the target pack’s release notes and confirm its Minecraft, loader, and Java requirements.
  2. Back up /data while the server is stopped or otherwise quiescent.
  3. Change only the relevant Compose variables, such as the image tag, pack version, or MEMORY.
  4. In Portainer, open the Stack, edit the Web editor or environment values, and select Update the stack. Pull a new image when Portainer offers that option.
  5. Follow the logs from the first boot. If the server fails, stop it before making further changes and restore the backup rather than deleting files at random.

Keeping pull_policy: daily with an unpinned latest image favors automatic freshness over reproducibility. For a community server where unexpected changes are disruptive, use a tested image tag and update on a schedule.

Troubleshoot the failures you are most likely to see

Symptom Likely cause Action
The container exits immediately with an EULA message EULA is missing or not exactly true. Set EULA: 'TRUE' in the Stack environment and redeploy.
Port 25565 is already allocated Another service or an old Minecraft container owns the host port. Inspect Portainer’s containers, stop the conflicting service, or deliberately choose another host port and give players that port.
The world disappears after redeploying The Stack mounted a different or empty path, or no /data volume was configured. Check the container’s Mounts view, verify the host path, stop the server, and restore the known backup if necessary.
“Connection refused” from the LAN The server is still starting, is restarting, the firewall blocks 25565, or the port mapping is wrong. Read logs first, confirm a ready message, inspect the published port, and test from the host’s LAN address.
LAN works but Internet players cannot connect Router forwarding, firewall policy, changing WAN address, or CGNAT. Verify the forward targets the host’s fixed LAN address, check the public address from outside the LAN, and ask the provider whether inbound traffic is possible.
“Unsupported class version” or Java startup errors The image’s Java runtime does not match the pack. Use an image tag or Java variant compatible with the pack’s stated Java major version.
Mod loading errors or missing dependencies Wrong Minecraft version, loader build, client-only mod, or incomplete server pack. Compare the log’s failing mod with the pack’s server instructions; replace the server pack rather than guessing individual files.
The server runs out of memory or lags heavily Insufficient heap, too many entities or chunks, or a host under memory pressure. Check actual host memory, raise MEMORY within safe limits, remove unsupported mods, and profile workload before adding more hardware.
CurseForge download fails Missing or invalid API key, an unavailable server pack, or incorrect URL variables. Recheck the automatic mode, credentials, page/file URL, pack permissions, and the exact variable names documented for the current image.
Permission denied under /data Host directory ownership, SELinux labeling, or another mandatory access-control policy. Correct ownership and labels according to the host policy; some environments require the documented :Z volume suffix.

Security and maintenance practices

  • Use a unique Portainer administrator password and keep Portainer reachable only from trusted networks or an authenticated access layer.
  • Protect the Docker socket and host shell. Anyone who controls the Docker daemon can generally control the host.
  • Keep API keys, RCON passwords, and environment files out of public repositories and world-download archives.
  • Load generic-pack and environment files only from trusted sources. Shell-style environment files can be evaluated and may contain commands or substitutions that are unsafe to import blindly.
  • Back up the world and the Compose definition separately. A world backup without the matching mod and configuration versions may not restore cleanly.
  • Test a backup by restoring it to a separate directory or temporary Stack; a file that was copied is not necessarily a usable backup.

Self-hosting versus a virtual private server

Factor Home or office host Virtual private server
Monthly cost Uses existing hardware and electricity; no fixed hosting fee, but hardware replacement is your responsibility. Recurring fee with provider-managed physical infrastructure.
Latency Excellent for local players; Internet latency depends on your upload path. Often consistent for geographically nearby players; location matters.
Upload bandwidth Limited by the residential or office connection, especially during backups. Usually a higher and more predictable allocation, subject to the plan.
Port forwarding May require router configuration and can be blocked by CGNAT. Usually has a public address and provider firewall controls.
Storage and backups You choose disks and backup destinations, but must maintain them. Persistent disks and snapshots vary by provider and plan; verify what survives deletion.
Administration Full physical access and no provider virtualization layer. Remote root access, with provider-specific limits and recovery procedures.

In either environment, Portainer’s Stack workflow is essentially the same. The deciding factors are reachable networking, reliable storage, sufficient memory, and who will perform operating-system and backup maintenance.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A repeatable operating checklist

  1. Confirm the pack’s Minecraft version, loader, Java requirement, server-pack format, and memory guidance.
  2. Verify Docker and Portainer are healthy at https://HOST:9443.
  3. Choose a persistent /data bind mount or named volume and test write permissions.
  4. Set EULA: 'TRUE', the correct TYPE, version, memory, and any protected credentials.
  5. Publish host port 25565 and allow only the required firewall sources.
  6. Deploy the Stack and follow logs until the server reports readiness.
  7. Join locally first, then test Internet access from outside the home network if needed.
  8. Back up /data before every loader, Minecraft, image, or modpack upgrade.
  9. Record the working Compose file and image tag so you can reproduce the deployment.