<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Docker-Compose on Margrop Blog</title>
    <link>https://blog.margrop.net/en/tag/docker-compose/</link>
    <description>Recent content in Docker-Compose on Margrop Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Fri, 10 Jul 2026 22:00:00 +0800</lastBuildDate>
    <atom:link href="https://blog.margrop.net/en/tag/docker-compose/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Take Back Your Remote Desktop: Deploying an All-in-One RustDesk Server Safely</title>
      <link>https://blog.margrop.net/en/post/rustdesk-all-in-one-server-guide/</link>
      <pubDate>Fri, 10 Jul 2026 22:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/rustdesk-all-in-one-server-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;RustDesk is an open-source remote desktop application designed with self-hosting in mind. When two clients can reach each other directly, screen and input traffic can use a peer-to-peer path. When that direct path fails, a relay server forwards the encrypted traffic. Hosting the server yourself does not eliminate servers; it puts device registration, relay routing, keys, accounts, and logs back under your control.&lt;/p&gt;&#xA;&lt;p&gt;This guide uses the community-maintained &lt;code&gt;lejianwen/rustdesk-server-s6&lt;/code&gt; image to place the RustDesk OSS &lt;code&gt;hbbs&lt;/code&gt; and &lt;code&gt;hbbr&lt;/code&gt; services together with a community API and web administration layer in one container. It is a convenient option for homes, labs, and small teams, but it is &lt;strong&gt;not an official RustDesk all-in-one distribution&lt;/strong&gt;. Evaluate the community image, pin a tested tag or digest, back up its persistent data, and rehearse upgrades and rollbacks before treating it as production infrastructure.&lt;/p&gt;&#xA;&lt;p&gt;Every address in this article uses &lt;code&gt;example.com&lt;/code&gt;. No real IP address, private domain, hostname, device ID, account, key, token, cookie, or private registry is shown. The screenshots come from public official or community project pages.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>I Put Docker in a Control Room: Portainer CE 2.39.4 Deployment, Daily Use, and Real Traps</title>
      <link>https://blog.margrop.net/en/post/portainer-ce-docker-deployment-guide/</link>
      <pubDate>Fri, 10 Jul 2026 15:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/portainer-ce-docker-deployment-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Bottom line first&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Portainer does not replace Docker. It is a control room for a Docker host. Docker Engine remains the machinery; Portainer organizes containers, images, networks, volumes, and Compose stacks into a web dashboard.&lt;/p&gt;&#xA;&lt;p&gt;I ran an isolated deployment of &lt;code&gt;portainer/portainer-ce:2.39.4&lt;/code&gt;, initialized it, connected the local Docker environment, inspected the dashboard, filtered a disposable container, and created a demonstration stack. The installation is one &lt;code&gt;docker run&lt;/code&gt; command. The important lessons are broader: persist &lt;code&gt;/data&lt;/code&gt;, understand that &lt;code&gt;/var/run/docker.sock&lt;/code&gt; is highly privileged, and never expose the management interface to an untrusted network without protection.&lt;/p&gt;&#xA;&lt;p&gt;This article contains no complete IP address, real host name, private domain, administrator password, token, cookie, private registry address, or production container name. The screenshots use disposable names, and the container address is redacted.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Stop Sprinkling API Keys Everywhere: My Self-Hosted NewAPI Relay Station</title>
      <link>https://blog.margrop.net/en/post/newapi-self-hosted-relay-station/</link>
      <pubDate>Fri, 10 Jul 2026 15:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/newapi-self-hosted-relay-station/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;NewAPI is not a free-model trick and it is not a mysterious proxy. In my setup, it is the front desk for AI usage: every app talks to one endpoint, while the gateway routes requests to authorized upstream providers and handles tokens, quotas, groups, model limits, logs, and usage accounting. For a personal deployment, the big win is not “one more dashboard”; it is no longer scattering upstream keys across every client, script, and agent.&lt;/p&gt;&#xA;&lt;p&gt;This post explains why I wanted a self-hosted model relay, what people usually misunderstand, how to deploy a minimal Docker Compose version, why I add persistent storage, and how to use one-click scripts for Windows 11, Ubuntu 26.04, and macOS 26. It also includes an agent-driven setup prompt with strict boundaries. No private address, complete machine name, private domain, or real secret is included.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Docker Container Crash Loop After v3.7.0? You&#39;re Missing One Word: serve</title>
      <link>https://blog.margrop.net/en/post/siyuan-v370-docker-restart-loop-fix/</link>
      <pubDate>Thu, 02 Jul 2026 19:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/siyuan-v370-docker-restart-loop-fix/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;After upgrading Siyuan (SiYuan Note) from v3.6.x to v3.7.0, the Docker container entered an infinite restart loop. &lt;code&gt;docker logs&lt;/code&gt; showed &lt;code&gt;Error: unknown flag: --accessAuthCode&lt;/code&gt;. The root cause: v3.7.0 introduced a CLI subcommand architecture. The old top-level flags now require a &lt;code&gt;serve&lt;/code&gt; subcommand. The fix is adding one word — &lt;code&gt;&#39;serve&#39;&lt;/code&gt; — to the beginning of the &lt;code&gt;command&lt;/code&gt; array in docker-compose.yml. Seven characters. From crash loop to running.&lt;/p&gt;&#xA;&lt;p&gt;This article covers the complete troubleshooting process, one-command fix scripts for Windows 11, Ubuntu 26.04, and macOS 26, plus both manual and AI Agent approaches. All scripts use only Docker CLI and SSH — no third-party services required.&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>The Portainer 500 Error That Wasn&#39;t the YAML — A Two-librespeed_default-Network Story</title>
      <link>https://blog.margrop.net/en/post/portainer-500-duplicate-compose-network-enigma/</link>
      <pubDate>Sat, 13 Jun 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/portainer-500-duplicate-compose-network-enigma/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;The short version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;You update a stack in Portainer. The browser slaps you with a red &lt;code&gt;500 Internal Server Error&lt;/code&gt;. You assume the YAML is wrong, fix the indentation, swap the quotes, drop the image tag. You hit Update again. Same 500. And again. And again.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;The real culprit is buried at the deepest level of the HTTP response body: &lt;code&gt;network librespeed_default is ambiguous (2 matches found on name)&lt;/code&gt;.&lt;/strong&gt; Two networks with the same name exist in the same Docker engine—two IDs, two &lt;code&gt;Created&lt;/code&gt; timestamps, two &lt;code&gt;com.docker.compose.config-hash&lt;/code&gt; labels, but a single shared name. Compose asks the engine to look up that name; the engine refuses to pick between them; &lt;code&gt;compose up&lt;/code&gt; fails; Portainer wraps the error as a 500 and returns it to your browser.&lt;/p&gt;&#xA;&lt;p&gt;The fix is embarrassingly simple: &lt;strong&gt;delete one of the two orphan networks&lt;/strong&gt; (&lt;code&gt;docker network rm &amp;lt;id&amp;gt;&lt;/code&gt; or click Remove in Portainer&amp;rsquo;s Networks page), then re-run Update the stack with the exact same content. It just works.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This post is a real debugging session: a stack update that was supposed to be a 30-second mount-path change turned into a 1-hour investigation. All private details (internal addresses, registry URLs, volume paths, container names, credentials) have been replaced with &lt;code&gt;&amp;lt;PLACEHOLDER&amp;gt;&lt;/code&gt;. Only public source code, official docs, and the error text itself are preserved.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Stop Using Old Methods! Deploying the Latest Docker CE on Ubuntu 26.04 LTS with Ultra-fast Mirror Setup</title>
      <link>https://blog.margrop.net/en/post/ubuntu-2604-docker-install-guide/</link>
      <pubDate>Tue, 26 May 2026 10:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/en/post/ubuntu-2604-docker-install-guide/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Foreword&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;With the official release of Ubuntu 26.04 LTS (Resolute Raccoon), developers and system administrators worldwide are upgrading their development, testing, and production environments to this long-term support version. However, setting up Docker—the cornerstone of modern containerization and microservices architecture—on a brand-new LTS release can sometimes present unexpected friction.&lt;/p&gt;&#xA;&lt;p&gt;If you are still relying on legacy commands like &lt;code&gt;apt-get install docker.io&lt;/code&gt;, or copy-pasting outdated tutorials meant for Ubuntu 20.04 or 22.04, you are likely to run into issues. These issues range from outdated software packages to APT repository format mismatches (especially with the widespread adoption of the new DEB822 format), or network timeouts when pulling images from container registries in restricted environments.&lt;/p&gt;&#xA;&lt;p&gt;This article provides a comprehensive, step-by-step, and highly detailed guide to installing Docker Community Edition (Docker CE) on Ubuntu 26.04 LTS. We will delve into modern DEB822 repository configurations, non-root system privilege separation, systemd service tweaks, and advanced network acceleration (both HTTP/HTTPS proxies and private registry mirrors).&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
  </channel>
</rss>
