mysite/public/posts/minecraft_server/index.html

74 lines
No EOL
39 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html><html lang=en dir=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>Dockerizing my Minecraft Server + Geyser: from 'no space left' to stable releases | AlipourIm journeys</title>
<meta name=keywords content="minecraft,docker,paper,papermod,geyser,linux,lvm"><meta name=description content="How I containerized a Java Minecraft server with Geyser, hit a /var space wall, and locked the server to the latest stable release."><meta name=author content="Iman Alipour"><link rel=canonical href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/posts/minecraft_server/><link crossorigin=anonymous href=/assets/css/stylesheet.51e3b550fcc0c3f3a10e2d7b70445c6cb21171bed36521d66dc7427208cafbf9.css integrity="sha256-UeO1UPzAw/OhDi17cERcbLIRcb7TZSHWbcdCcgjK+/k=" rel="preload stylesheet" as=style><link rel=icon href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/favicon.ico><link rel=icon type=image/png sizes=16x16 href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/favicon-32x32.png><link rel=apple-touch-icon href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/apple-touch-icon.png><link rel=mask-icon href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/posts/minecraft_server/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51)}.list{background:var(--theme)}.list:not(.dark)::-webkit-scrollbar-track{background:0 0}.list:not(.dark)::-webkit-scrollbar-thumb{border-color:var(--theme)}}</style></noscript><meta property="og:url" content="http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/posts/minecraft_server/"><meta property="og:site_name" content="AlipourIm journeys"><meta property="og:title" content="Dockerizing my Minecraft Server + Geyser: from 'no space left' to stable releases"><meta property="og:description" content="How I containerized a Java Minecraft server with Geyser, hit a /var space wall, and locked the server to the latest stable release."><meta property="og:locale" content="en"><meta property="og:type" content="article"><meta property="article:section" content="posts"><meta property="article:published_time" content="2025-09-29T09:06:29+00:00"><meta property="article:modified_time" content="2025-09-29T09:06:29+00:00"><meta property="article:tag" content="Minecraft"><meta property="article:tag" content="Docker"><meta property="article:tag" content="Paper"><meta property="article:tag" content="Papermod"><meta property="article:tag" content="Geyser"><meta property="article:tag" content="Linux"><meta name=twitter:card content="summary"><meta name=twitter:title content="Dockerizing my Minecraft Server + Geyser: from 'no space left' to stable releases"><meta name=twitter:description content="How I containerized a Java Minecraft server with Geyser, hit a /var space wall, and locked the server to the latest stable release."><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Posts","item":"http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/posts/"},{"@type":"ListItem","position":2,"name":"Dockerizing my Minecraft Server + Geyser: from 'no space left' to stable releases","item":"http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/posts/minecraft_server/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"Dockerizing my Minecraft Server + Geyser: from 'no space left' to stable releases","name":"Dockerizing my Minecraft Server \u002b Geyser: from \u0027no space left\u0027 to stable releases","description":"How I containerized a Java Minecraft server with Geyser, hit a /var space wall, and locked the server to the latest stable release.","keywords":["minecraft","docker","paper","papermod","geyser","linux","lvm"],"articleBody":"Why Ive been running a Java Minecraft world (with Bedrock players via Geyser) in tmux. I moved it to Docker for easier updates, backups, and restarts. Along the way I hit:\nfailed to register layer: ... no space left on device Client saying: “Outdated client, please use 1.21.9 Pre-Release 2” Wanting config in a neat .env and no whitelist Heres exactly what I did.\nFolder layout ~/minecraft/ ├─ docker-compose.yml ├─ .env └─ plugins/ .env (secrets \u0026 knobs) Use the latest stable (not snapshots/pre-releases) by setting VERSION=LATEST.\n# Minecraft server configuration EULA=TRUE TYPE=PAPER VERSION=LATEST MEMORY=4G USE_AIKAR_FLAGS=true # RCON (remote console) ENABLE_RCON=true RCON_PASSWORD=superSecretPassword123 I dont use a whitelist, so no WHITELIST/ENFORCE_WHITELIST variables.\ndocker-compose.yml services: mc: image: itzg/minecraft-server:latest container_name: mc restart: unless-stopped ports: - \"25565:25565\" # Java - \"19132:19132/udp\" # Bedrock via Geyser plugin env_file: - .env volumes: - mc-data:/data - ./plugins:/plugins:ro volumes: mc-data: {} The version: key in Compose is obsolete now, so I dropped it.\nAdd Geyser (and optional Floodgate) as plugins mkdir -p ~/minecraft/plugins cd ~/minecraft/plugins # Geyser (Spigot/Paper) wget https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot -O Geyser-Spigot.jar # Floodgate (optional: Bedrock accounts without Java linking) wget https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot -O Floodgate-Spigot.jar Start it up:\ndocker compose up -d On first run, Geyser writes its config to /data/plugins/Geyser-Spigot/. Open UDP 19132 on your firewall.\nHit a wall: /var ran out of space Docker stores layers at /var/lib/docker by default. My /var LV was tiny:\n/ d e v / m a p p e r / u b u n t u - - v g - v a r 3 . 9 G 3 . 4 G 3 3 3 M 9 2 % v a r Quick cleanup docker system df docker system prune -f docker builder prune -af sudo apt-get clean sudo journalctl --vacuum-size=100M If thats not enough, you have two good options:\nOption A — Move Dockers data off /var sudo systemctl stop docker sudo mkdir -p /home/docker sudo rsync -aHAX --info=progress2 /var/lib/docker/ /home/docker/ echo '{ \"data-root\": \"/home/docker\" }' | sudo tee /etc/docker/daemon.json sudo systemctl start docker docker info | grep \"Docker Root Dir\" If all looks good, free the old space:\nsudo rm -rf /var/lib/docker/* Option B — Grow /var (LVM) Check free space in the VG:\nsudo vgdisplay # look for \"Free PE / Size\" If available, extend /var by +5G:\nsudo lvextend -L +5G /dev/mapper/ubuntu--vg-var sudo resize2fs /dev/mapper/ubuntu--vg-var The version mismatch: pre-release vs stable My logs showed:\nS t a r t i n g m i n e c r a f t s e r v e r v e r s i o n 1 . 2 1 . 9 P r e - R e l e a s e 2 That happens if the server pulls a pre-release build (or if VERSION=LATEST). Fix:\nEnsure .env has: VERSION=LATEST_RELEASE Recreate: docker compose down docker compose pull docker compose up -d Verify: docker logs mc | grep \"Starting minecraft server version\" # -\u003e Starting minecraft server version 1.21.1 (example) Tip: If you want to pin and avoid auto-updates entirely, set VERSION=1.21.1 (or whatever stable youve validated).\nNo whitelist Because I dont set WHITELIST/ENFORCE_WHITELIST, anyone can join (subject to online-mode, bans, and Geyser/Floodgate auth settings). Manage ops/permissions via:\ndocker exec -it mc rcon-cli \"op YourJavaIGN\" (or edit /data/ops.json).\nBackup \u0026 updates World/data live under the mc-data volume → back up /data regularly. Update cleanly: docker compose pull \u0026\u0026 docker compose up -d Watch space: watch -n5 'df -h /var; docker system df' TL;DR Put Geyser/Floodgate jars in ./plugins and expose 19132/udp. Keep configs in .env. Fix /var space by pruning, moving Dockers data-root, or extending /var via LVM. Verify version in logs after each change. Happy block-breaking! 🧱🚀\n","wordCount":"609","inLanguage":"en","datePublished":"2025-09-29T09:06:29Z","dateModified":"2025-09-29T09:06:29Z","author":{"@type":"Person","name":"Iman Alipour"},"mainEntityOfPage":{"@type":"WebPage","@id":"http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/posts/minecraft_server/"},"publisher":{"@type":"Organization","name":"AlipourIm journeys","logo":{"@type":"ImageObject","url":"http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/favicon.ico"}}}</script></head><body id=top><script>localStorage.getItem("pref-theme")==="dark"?document.body.classList.add("dark"):localStorage.getItem("pref-theme")==="light"?document.body.classList.remove("dark"):window.matchMedia("(prefers-color-scheme: dark)").matches&&document.body.classList.add("dark")</script><header class=header><nav class=nav><div class=logo><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/ accesskey=h title="AlipourIm journeys (Alt + H)">AlipourIm journeys</a><div class=logo-switches><button id=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme"><svg id="moon" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg id="sun" width="24" height="18" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu><li><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/posts/ title=Posts><span>Posts</span></a></li><li><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/phd_journey/ title=PhD_journey><span>PhD_journey</span></a></li><li><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/about/ title=About><span>About</span></a></li></ul></nav></header><main class=main><article class=post-single><header class=post-header><div class=breadcrumbs><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/>Home</a>&nbsp;»&nbsp;<a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/posts/>Posts</a></div><h1 class="post-title entry-hint-parent">Dockerizing my Minecraft Server + Geyser: from 'no space left' to stable releases</h1><div class=post-meta><span title='2025-09-29 09:06:29 +0000 UTC'>September 29, 2025</span>&nbsp;·&nbsp;3 min&nbsp;·&nbsp;Iman Alipour
<span class=post-meta-item><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/posts/minecraft_server/#isso-thread class=isso-comments-link>Comments</a></span></div></header><div class=post-content><h2 id=why>Why<a hidden class=anchor aria-hidden=true href=#why>#</a></h2><p>Ive been running a Java Minecraft world (with Bedrock players via <strong>Geyser</strong>) in <code>tmux</code>. I moved it to Docker for easier updates, backups, and restarts. Along the way I hit:</p><ul><li><code>failed to register layer: ... no space left on device</code></li><li>Client saying: <strong>“Outdated client, please use 1.21.9 Pre-Release 2”</strong></li><li>Wanting config in a neat <code>.env</code> and <strong>no whitelist</strong></li></ul><p>Heres exactly what I did.</p><hr><h2 id=folder-layout>Folder layout<a hidden class=anchor aria-hidden=true href=#folder-layout>#</a></h2><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>~/minecraft/
</span></span><span style=display:flex><span>├─ docker-compose.yml
</span></span><span style=display:flex><span>├─ .env
</span></span><span style=display:flex><span>└─ plugins/
</span></span></code></pre></div><hr><h2 id=env-secrets--knobs><code>.env</code> (secrets & knobs)<a hidden class=anchor aria-hidden=true href=#env-secrets--knobs>#</a></h2><p>Use the <strong>latest stable</strong> (not snapshots/pre-releases) by setting <code>VERSION=LATEST</code>.</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-env data-lang=env><span style=display:flex><span><span style=color:#75715e># Minecraft server configuration</span>
</span></span><span style=display:flex><span>EULA<span style=color:#f92672>=</span>TRUE
</span></span><span style=display:flex><span>TYPE<span style=color:#f92672>=</span>PAPER
</span></span><span style=display:flex><span>VERSION<span style=color:#f92672>=</span>LATEST
</span></span><span style=display:flex><span>MEMORY<span style=color:#f92672>=</span>4G
</span></span><span style=display:flex><span>USE_AIKAR_FLAGS<span style=color:#f92672>=</span>true
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#75715e># RCON (remote console)</span>
</span></span><span style=display:flex><span>ENABLE_RCON<span style=color:#f92672>=</span>true
</span></span><span style=display:flex><span>RCON_PASSWORD<span style=color:#f92672>=</span>superSecretPassword123
</span></span></code></pre></div><blockquote><p>I dont use a whitelist, so no <code>WHITELIST</code>/<code>ENFORCE_WHITELIST</code> variables.</p></blockquote><hr><h2 id=docker-composeyml><code>docker-compose.yml</code><a hidden class=anchor aria-hidden=true href=#docker-composeyml>#</a></h2><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-yaml data-lang=yaml><span style=display:flex><span><span style=color:#f92672>services</span>:
</span></span><span style=display:flex><span> <span style=color:#f92672>mc</span>:
</span></span><span style=display:flex><span> <span style=color:#f92672>image</span>: <span style=color:#ae81ff>itzg/minecraft-server:latest</span>
</span></span><span style=display:flex><span> <span style=color:#f92672>container_name</span>: <span style=color:#ae81ff>mc</span>
</span></span><span style=display:flex><span> <span style=color:#f92672>restart</span>: <span style=color:#ae81ff>unless-stopped</span>
</span></span><span style=display:flex><span> <span style=color:#f92672>ports</span>:
</span></span><span style=display:flex><span> - <span style=color:#e6db74>&#34;25565:25565&#34;</span> <span style=color:#75715e># Java</span>
</span></span><span style=display:flex><span> - <span style=color:#e6db74>&#34;19132:19132/udp&#34;</span> <span style=color:#75715e># Bedrock via Geyser plugin</span>
</span></span><span style=display:flex><span> <span style=color:#f92672>env_file</span>:
</span></span><span style=display:flex><span> - <span style=color:#ae81ff>.env</span>
</span></span><span style=display:flex><span> <span style=color:#f92672>volumes</span>:
</span></span><span style=display:flex><span> - <span style=color:#ae81ff>mc-data:/data</span>
</span></span><span style=display:flex><span> - <span style=color:#ae81ff>./plugins:/plugins:ro</span>
</span></span><span style=display:flex><span><span style=color:#f92672>volumes</span>:
</span></span><span style=display:flex><span> <span style=color:#f92672>mc-data</span>: {}
</span></span></code></pre></div><blockquote><p>The <code>version:</code> key in Compose is obsolete now, so I dropped it.</p></blockquote><hr><h2 id=add-geyser-and-optional-floodgate-as-plugins>Add Geyser (and optional Floodgate) as plugins<a hidden class=anchor aria-hidden=true href=#add-geyser-and-optional-floodgate-as-plugins>#</a></h2><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>mkdir -p ~/minecraft/plugins
</span></span><span style=display:flex><span>cd ~/minecraft/plugins
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#75715e># Geyser (Spigot/Paper)</span>
</span></span><span style=display:flex><span>wget https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot -O Geyser-Spigot.jar
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span><span style=color:#75715e># Floodgate (optional: Bedrock accounts without Java linking)</span>
</span></span><span style=display:flex><span>wget https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot -O Floodgate-Spigot.jar
</span></span></code></pre></div><p>Start it up:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>docker compose up -d
</span></span></code></pre></div><p>On first run, Geyser writes its config to <code>/data/plugins/Geyser-Spigot/</code>. Open UDP <strong>19132</strong> on your firewall.</p><hr><h2 id=hit-a-wall-var-ran-out-of-space>Hit a wall: <code>/var</code> ran out of space<a hidden class=anchor aria-hidden=true href=#hit-a-wall-var-ran-out-of-space>#</a></h2><p>Docker stores layers at <code>/var/lib/docker</code> by default. My <code>/var</code> LV was tiny:</p><div class="goat svg-container"><svg font-family="Menlo,Lucida Console,monospace" viewBox="0 0 448 25"><g transform="translate(8,16)"><path d="M404 8V24" fill="none" stroke="currentcolor"/><text text-anchor="middle" x="0" y="4" fill="currentcolor" style="font-size:1em">/</text><text text-anchor="middle" x="8" y="4" fill="currentcolor" style="font-size:1em">d</text><text text-anchor="middle" x="16" y="4" fill="currentcolor" style="font-size:1em">e</text><text text-anchor="middle" x="24" y="4" fill="currentcolor" style="font-size:1em">v</text><text text-anchor="middle" x="32" y="4" fill="currentcolor" style="font-size:1em">/</text><text text-anchor="middle" x="40" y="4" fill="currentcolor" style="font-size:1em">m</text><text text-anchor="middle" x="48" y="4" fill="currentcolor" style="font-size:1em">a</text><text text-anchor="middle" x="56" y="4" fill="currentcolor" style="font-size:1em">p</text><text text-anchor="middle" x="64" y="4" fill="currentcolor" style="font-size:1em">p</text><text text-anchor="middle" x="72" y="4" fill="currentcolor" style="font-size:1em">e</text><text text-anchor="middle" x="80" y="4" fill="currentcolor" style="font-size:1em">r</text><text text-anchor="middle" x="88" y="4" fill="currentcolor" style="font-size:1em">/</text><text text-anchor="middle" x="96" y="4" fill="currentcolor" style="font-size:1em">u</text><text text-anchor="middle" x="104" y="4" fill="currentcolor" style="font-size:1em">b</text><text text-anchor="middle" x="112" y="4" fill="currentcolor" style="font-size:1em">u</text><text text-anchor="middle" x="120" y="4" fill="currentcolor" style="font-size:1em">n</text><text text-anchor="middle" x="128" y="4" fill="currentcolor" style="font-size:1em">t</text><text text-anchor="middle" x="136" y="4" fill="currentcolor" style="font-size:1em">u</text><text text-anchor="middle" x="144" y="4" fill="currentcolor" style="font-size:1em">-</text><text text-anchor="middle" x="152" y="4" fill="currentcolor" style="font-size:1em">-</text><text text-anchor="middle" x="160" y="4" fill="currentcolor" style="font-size:1em">v</text><text text-anchor="middle" x="168" y="4" fill="currentcolor" style="font-size:1em">g</text><text text-anchor="middle" x="176" y="4" fill="currentcolor" style="font-size:1em">-</text><text text-anchor="middle" x="184" y="4" fill="currentcolor" style="font-size:1em">v</text><text text-anchor="middle" x="192" y="4" fill="currentcolor" style="font-size:1em">a</text><text text-anchor="middle" x="200" y="4" fill="currentcolor" style="font-size:1em">r</text><text text-anchor="middle" x="232" y="4" fill="currentcolor" style="font-size:1em">3</text><text text-anchor="middle" x="240" y="4" fill="currentcolor" style="font-size:1em">.</text><text text-anchor="middle" x="248" y="4" fill="currentcolor" style="font-size:1em">9</text><text text-anchor="middle" x="256" y="4" fill="currentcolor" style="font-size:1em">G</text><text text-anchor="middle" x="280" y="4" fill="currentcolor" style="font-size:1em">3</text><text text-anchor="middle" x="288" y="4" fill="currentcolor" style="font-size:1em">.</text><text text-anchor="middle" x="296" y="4" fill="currentcolor" style="font-size:1em">4</text><text text-anchor="middle" x="304" y="4" fill="currentcolor" style="font-size:1em">G</text><text text-anchor="middle" x="328" y="4" fill="currentcolor" style="font-size:1em">3</text><text text-anchor="middle" x="336" y="4" fill="currentcolor" style="font-size:1em">3</text><text text-anchor="middle" x="344" y="4" fill="currentcolor" style="font-size:1em">3</text><text text-anchor="middle" x="352" y="4" fill="currentcolor" style="font-size:1em">M</text><text text-anchor="middle" x="376" y="4" fill="currentcolor" style="font-size:1em">9</text><text text-anchor="middle" x="384" y="4" fill="currentcolor" style="font-size:1em">2</text><text text-anchor="middle" x="392" y="4" fill="currentcolor" style="font-size:1em">%</text><text text-anchor="middle" x="416" y="4" fill="currentcolor" style="font-size:1em">v</text><text text-anchor="middle" x="424" y="4" fill="currentcolor" style="font-size:1em">a</text><text text-anchor="middle" x="432" y="4" fill="currentcolor" style="font-size:1em">r</text></g></svg></div><h3 id=quick-cleanup>Quick cleanup<a hidden class=anchor aria-hidden=true href=#quick-cleanup>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>docker system df
</span></span><span style=display:flex><span>docker system prune -f
</span></span><span style=display:flex><span>docker builder prune -af
</span></span><span style=display:flex><span>sudo apt-get clean
</span></span><span style=display:flex><span>sudo journalctl --vacuum-size<span style=color:#f92672>=</span>100M
</span></span></code></pre></div><p>If thats not enough, you have two good options:</p><h3 id=option-a--move-dockers-data-off-var>Option A — Move Dockers data off <code>/var</code><a hidden class=anchor aria-hidden=true href=#option-a--move-dockers-data-off-var>#</a></h3><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>sudo systemctl stop docker
</span></span><span style=display:flex><span>sudo mkdir -p /home/docker
</span></span><span style=display:flex><span>sudo rsync -aHAX --info<span style=color:#f92672>=</span>progress2 /var/lib/docker/ /home/docker/
</span></span><span style=display:flex><span>echo <span style=color:#e6db74>&#39;{ &#34;data-root&#34;: &#34;/home/docker&#34; }&#39;</span> | sudo tee /etc/docker/daemon.json
</span></span><span style=display:flex><span>sudo systemctl start docker
</span></span><span style=display:flex><span>docker info | grep <span style=color:#e6db74>&#34;Docker Root Dir&#34;</span>
</span></span></code></pre></div><p>If all looks good, free the old space:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>sudo rm -rf /var/lib/docker/*
</span></span></code></pre></div><h3 id=option-b--grow-var-lvm>Option B — Grow <code>/var</code> (LVM)<a hidden class=anchor aria-hidden=true href=#option-b--grow-var-lvm>#</a></h3><p>Check free space in the VG:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>sudo vgdisplay <span style=color:#75715e># look for &#34;Free PE / Size&#34;</span>
</span></span></code></pre></div><p>If available, extend <code>/var</code> by +5G:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>sudo lvextend -L +5G /dev/mapper/ubuntu--vg-var
</span></span><span style=display:flex><span>sudo resize2fs /dev/mapper/ubuntu--vg-var
</span></span></code></pre></div><hr><h2 id=the-version-mismatch-pre-release-vs-stable>The version mismatch: pre-release vs stable<a hidden class=anchor aria-hidden=true href=#the-version-mismatch-pre-release-vs-stable>#</a></h2><p>My logs showed:</p><div class="goat svg-container"><svg font-family="Menlo,Lucida Console,monospace" viewBox="0 0 440 25"><g transform="translate(8,16)"><text text-anchor="middle" x="0" y="4" fill="currentcolor" style="font-size:1em">S</text><text text-anchor="middle" x="8" y="4" fill="currentcolor" style="font-size:1em">t</text><text text-anchor="middle" x="16" y="4" fill="currentcolor" style="font-size:1em">a</text><text text-anchor="middle" x="24" y="4" fill="currentcolor" style="font-size:1em">r</text><text text-anchor="middle" x="32" y="4" fill="currentcolor" style="font-size:1em">t</text><text text-anchor="middle" x="40" y="4" fill="currentcolor" style="font-size:1em">i</text><text text-anchor="middle" x="48" y="4" fill="currentcolor" style="font-size:1em">n</text><text text-anchor="middle" x="56" y="4" fill="currentcolor" style="font-size:1em">g</text><text text-anchor="middle" x="72" y="4" fill="currentcolor" style="font-size:1em">m</text><text text-anchor="middle" x="80" y="4" fill="currentcolor" style="font-size:1em">i</text><text text-anchor="middle" x="88" y="4" fill="currentcolor" style="font-size:1em">n</text><text text-anchor="middle" x="96" y="4" fill="currentcolor" style="font-size:1em">e</text><text text-anchor="middle" x="104" y="4" fill="currentcolor" style="font-size:1em">c</text><text text-anchor="middle" x="112" y="4" fill="currentcolor" style="font-size:1em">r</text><text text-anchor="middle" x="120" y="4" fill="currentcolor" style="font-size:1em">a</text><text text-anchor="middle" x="128" y="4" fill="currentcolor" style="font-size:1em">f</text><text text-anchor="middle" x="136" y="4" fill="currentcolor" style="font-size:1em">t</text><text text-anchor="middle" x="152" y="4" fill="currentcolor" style="font-size:1em">s</text><text text-anchor="middle" x="160" y="4" fill="currentcolor" style="font-size:1em">e</text><text text-anchor="middle" x="168" y="4" fill="currentcolor" style="font-size:1em">r</text><text text-anchor="middle" x="176" y="4" fill="currentcolor" style="font-size:1em">v</text><text text-anchor="middle" x="184" y="4" fill="currentcolor" style="font-size:1em">e</text><text text-anchor="middle" x="192" y="4" fill="currentcolor" style="font-size:1em">r</text><text text-anchor="middle" x="208" y="4" fill="currentcolor" style="font-size:1em">v</text><text text-anchor="middle" x="216" y="4" fill="currentcolor" style="font-size:1em">e</text><text text-anchor="middle" x="224" y="4" fill="currentcolor" style="font-size:1em">r</text><text text-anchor="middle" x="232" y="4" fill="currentcolor" style="font-size:1em">s</text><text text-anchor="middle" x="240" y="4" fill="currentcolor" style="font-size:1em">i</text><text text-anchor="middle" x="248" y="4" fill="currentcolor" style="font-size:1em">o</text><text text-anchor="middle" x="256" y="4" fill="currentcolor" style="font-size:1em">n</text><text text-anchor="middle" x="272" y="4" fill="currentcolor" style="font-size:1em">1</text><text text-anchor="middle" x="280" y="4" fill="currentcolor" style="font-size:1em">.</text><text text-anchor="middle" x="288" y="4" fill="currentcolor" style="font-size:1em">2</text><text text-anchor="middle" x="296" y="4" fill="currentcolor" style="font-size:1em">1</text><text text-anchor="middle" x="304" y="4" fill="currentcolor" style="font-size:1em">.</text><text text-anchor="middle" x="312" y="4" fill="currentcolor" style="font-size:1em">9</text><text text-anchor="middle" x="328" y="4" fill="currentcolor" style="font-size:1em">P</text><text text-anchor="middle" x="336" y="4" fill="currentcolor" style="font-size:1em">r</text><text text-anchor="middle" x="344" y="4" fill="currentcolor" style="font-size:1em">e</text><text text-anchor="middle" x="352" y="4" fill="currentcolor" style="font-size:1em">-</text><text text-anchor="middle" x="360" y="4" fill="currentcolor" style="font-size:1em">R</text><text text-anchor="middle" x="368" y="4" fill="currentcolor" style="font-size:1em">e</text><text text-anchor="middle" x="376" y="4" fill="currentcolor" style="font-size:1em">l</text><text text-anchor="middle" x="384" y="4" fill="currentcolor" style="font-size:1em">e</text><text text-anchor="middle" x="392" y="4" fill="currentcolor" style="font-size:1em">a</text><text text-anchor="middle" x="400" y="4" fill="currentcolor" style="font-size:1em">s</text><text text-anchor="middle" x="408" y="4" fill="currentcolor" style="font-size:1em">e</text><text text-anchor="middle" x="424" y="4" fill="currentcolor" style="font-size:1em">2</text></g></svg></div><p>That happens if the server pulls a pre-release build (or if <code>VERSION=LATEST</code>). Fix:</p><ol><li>Ensure <code>.env</code> has:<div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-env data-lang=env><span style=display:flex><span>VERSION<span style=color:#f92672>=</span>LATEST_RELEASE
</span></span></code></pre></div></li><li>Recreate:<div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>docker compose down
</span></span><span style=display:flex><span>docker compose pull
</span></span><span style=display:flex><span>docker compose up -d
</span></span></code></pre></div></li><li>Verify:<div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>docker logs mc | grep <span style=color:#e6db74>&#34;Starting minecraft server version&#34;</span>
</span></span><span style=display:flex><span><span style=color:#75715e># -&gt; Starting minecraft server version 1.21.1 (example)</span>
</span></span></code></pre></div></li></ol><blockquote><p>Tip: If you <strong>want to pin</strong> and avoid auto-updates entirely, set <code>VERSION=1.21.1</code> (or whatever stable youve validated).</p></blockquote><hr><h2 id=no-whitelist>No whitelist<a hidden class=anchor aria-hidden=true href=#no-whitelist>#</a></h2><p>Because I dont set <code>WHITELIST</code>/<code>ENFORCE_WHITELIST</code>, anyone can join (subject to online-mode, bans, and Geyser/Floodgate auth settings). Manage ops/permissions via:</p><div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>docker exec -it mc rcon-cli <span style=color:#e6db74>&#34;op YourJavaIGN&#34;</span>
</span></span></code></pre></div><p>(or edit <code>/data/ops.json</code>).</p><hr><h2 id=backup--updates>Backup & updates<a hidden class=anchor aria-hidden=true href=#backup--updates>#</a></h2><ul><li>World/data live under the <code>mc-data</code> volume → back up <code>/data</code> regularly.</li><li>Update cleanly:<div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>docker compose pull <span style=color:#f92672>&amp;&amp;</span> docker compose up -d
</span></span></code></pre></div></li><li>Watch space:<div class=highlight><pre tabindex=0 style=color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>watch -n5 <span style=color:#e6db74>&#39;df -h /var; docker system df&#39;</span>
</span></span></code></pre></div></li></ul><hr><h2 id=tldr>TL;DR<a hidden class=anchor aria-hidden=true href=#tldr>#</a></h2><ul><li>Put <strong>Geyser/Floodgate</strong> jars in <code>./plugins</code> and expose <strong>19132/udp</strong>.</li><li>Keep configs in <code>.env</code>.</li><li>Fix <code>/var</code> space by pruning, <strong>moving Dockers data-root</strong>, or <strong>extending <code>/var</code></strong> via LVM.</li><li>Verify version in logs after each change.</li></ul><p>Happy block-breaking! 🧱🚀</p></div><footer class=post-footer><ul class=post-tags><li><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/tags/minecraft/>Minecraft</a></li><li><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/tags/docker/>Docker</a></li><li><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/tags/paper/>Paper</a></li><li><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/tags/papermod/>Papermod</a></li><li><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/tags/geyser/>Geyser</a></li><li><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/tags/linux/>Linux</a></li><li><a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/tags/lvm/>Lvm</a></li></ul><nav class=paginav><a class=prev href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/phd_journey/september_2025/><span class=title>« Prev</span><br><span>September '25</span>
</a><a class=next href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/posts/tor_clearnet_blog/><span class=title>Next »</span><br><span>Running my blog on Tor (.onion) and the Clearnet with Hugo + PaperMod</span></a></nav></footer><div class=comments-switch style="display:flex;gap:.5rem;margin:.5rem 0 1rem"><button id=btn-isso type=button aria-pressed=true>Anonymous (Isso)</button>
<button id=btn-giscus type=button aria-pressed=false>GitHub (Giscus)</button>
<a href=https://github.com/AlipourIm/blog-comments/discussions/categories/comments target=_blank rel=noopener>Open on GitHub ↗</a></div><div id=panel-isso><section id=isso-thread></section><script src=/isso/js/embed.min.js data-isso=/isso data-isso-css=true data-isso-lang=en data-isso-max-comments-nested=5 data-isso-sorting=newest async></script><small class=isso-powered style="display:block;margin:.5rem 0;color:var(--secondary,#888)">Comments powered by <a href=https://isso-comments.de target=_blank rel=noopener>Isso</a></small></div><div id=panel-giscus style=display:none><section id=giscus-thread></section></div><script>(function(){var t=document.getElementById("btn-isso"),n=document.getElementById("btn-giscus"),o=document.getElementById("panel-isso"),i=document.getElementById("panel-giscus"),s=!1;function e(e){var a,r=e==="isso";o.style.display=r?"":"none",i.style.display=r?"none":"",t.setAttribute("aria-pressed",r),n.setAttribute("aria-pressed",!r),!r&&!s&&(a=document.createElement("script"),a.src="https://giscus.app/client.js",a.async=!0,a.crossOrigin="anonymous",a.setAttribute("data-repo","AlipourIm/blog-comments"),a.setAttribute("data-repo-id","R_kgDOQGARyA"),a.setAttribute("data-category","Comments"),a.setAttribute("data-category-id","DIC_kwDOQGARyM4Cw3x-"),a.setAttribute("data-mapping","pathname"),a.setAttribute("data-strict","0"),a.setAttribute("data-reactions-enabled","1"),a.setAttribute("data-emit-metadata","0"),a.setAttribute("data-input-position","bottom"),a.setAttribute("data-theme","preferred_color_scheme"),a.setAttribute("data-lang","en"),document.getElementById("giscus-thread").appendChild(a),s=!0)}t.addEventListener("click",function(){e("isso")}),n.addEventListener("click",function(){e("giscus")}),e("isso")})()</script></article></main><footer class=footer><span>&copy; 2025 <a href=http://fjthpp2h3mj2rup25r3psmqamutnkbvxbpltlohdthw6fscgo3t6bpad.onion/>AlipourIm journeys</a></span> ·
<span>Powered by
<a href=https://gohugo.io/ rel="noopener noreferrer" target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top aria-label="go to top" title="Go to Top (Alt + G)" class=top-link id=top-link accesskey=g><svg viewBox="0 0 12 6" fill="currentcolor"><path d="M12 6H0l6-6z"/></svg>
</a><a href=/index.xml rel=alternate type=application/rss+xml title=RSS class=rss-link><svg viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 11a9 9 0 019 9"/><path d="M4 4a16 16 0 0116 16"/><circle cx="5" cy="19" r="1"/></svg>
<span>RSS</span>
</a><script>let menu=document.getElementById("menu");menu&&(menu.scrollLeft=localStorage.getItem("menu-scroll-position"),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}),document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var mybutton=document.getElementById("top-link");window.onscroll=function(){document.body.scrollTop>800||document.documentElement.scrollTop>800?(mybutton.style.visibility="visible",mybutton.style.opacity="1"):(mybutton.style.visibility="hidden",mybutton.style.opacity="0")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{document.body.className.includes("dark")?(document.body.classList.remove("dark"),localStorage.setItem("pref-theme","light")):(document.body.classList.add("dark"),localStorage.setItem("pref-theme","dark"))})</script><script>document.querySelectorAll("pre > code").forEach(e=>{const n=e.parentNode.parentNode,t=document.createElement("button");t.classList.add("copy-code"),t.innerHTML="copy";function s(){t.innerHTML="copied!",setTimeout(()=>{t.innerHTML="copy"},2e3)}t.addEventListener("click",t=>{if("clipboard"in navigator){navigator.clipboard.writeText(e.textContent),s();return}const n=document.createRange();n.selectNodeContents(e);const o=window.getSelection();o.removeAllRanges(),o.addRange(n);try{document.execCommand("copy"),s()}catch{}o.removeRange(n)}),n.classList.contains("highlight")?n.appendChild(t):n.parentNode.firstChild==n||(e.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName=="TABLE"?e.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(t):e.parentNode.appendChild(t))})</script></body></html>