<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>容器化 on 魔都水滴</title>
    <link>https://blog.margrop.net/tag/%E5%AE%B9%E5%99%A8%E5%8C%96/</link>
    <description>Recent content in 容器化 on 魔都水滴</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-CN</language>
    <lastBuildDate>Wed, 17 Jun 2026 20:30:00 +0800</lastBuildDate>
    <atom:link href="https://blog.margrop.net/tag/%E5%AE%B9%E5%99%A8%E5%8C%96/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>我把 AnythingLLM 装进 Docker 之后，容器像一只上紧发条的小松鼠——反复重启直到我把那个 1000:1000 给它</title>
      <link>https://blog.margrop.net/post/anythingllm-docker-deploy/</link>
      <pubDate>Wed, 17 Jun 2026 20:30:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/anythingllm-docker-deploy/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;TL;DR（先说结论）&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;AnythingLLM 这只&amp;quot;啥都能塞进去的 LLM 口袋书&amp;quot;官方就有 Docker 镜像，正常情况下 &lt;code&gt;docker run&lt;/code&gt; 一行就能起；但它里面那位 &lt;code&gt;anythingllm&lt;/code&gt; 用户很挑剔——挂给它的宿主机目录必须属于 &lt;code&gt;1000:1000&lt;/code&gt;，否则它写不动自己的 SQLite 数据库，Prisma 启动迁移会直接挂掉，容器就会进入&amp;quot;重启—挂掉—再重启&amp;quot;的死循环。修起来不到一分钟：&lt;code&gt;chown -R 1000:1000 /你的数据目录&lt;/code&gt;，再 &lt;code&gt;docker compose up -d&lt;/code&gt; 一次，它就乖乖听 &lt;code&gt;3001&lt;/code&gt; 了。&lt;/p&gt;&#xA;&lt;p&gt;本文顺道把&amp;quot;Prisma 那个 &lt;code&gt;file:../storage/anythingllm.db&lt;/code&gt; 相对路径为什么能坑死人&amp;quot;讲清楚，最后附上 Portainer stack 写法、几条常见坑、以及中英两个 demo 地址。&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Portainer 改个 stack 一直 500？我花了一晚上才明白，是 Docker 引擎里多了一个「重影」网络</title>
      <link>https://blog.margrop.net/post/portainer-500-duplicate-compose-network-enigma/</link>
      <pubDate>Sat, 13 Jun 2026 08:00:00 +0800</pubDate>
      <guid>https://blog.margrop.net/post/portainer-500-duplicate-compose-network-enigma/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;先说结论&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Portainer 改一个 stack，浏览器上弹出 &lt;code&gt;500 Internal Server Error&lt;/code&gt;。你以为又是 YAML 写错了，回去检查 compose 语法、缩进、引号、镜像 tag，全部都对。但每次重试都是同一个 500。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;真正的问题藏在 HTTP response body 的 &lt;code&gt;message&lt;/code&gt; 字段最深处：&lt;code&gt;network librespeed_default is ambiguous (2 matches found on name)&lt;/code&gt;。&lt;/strong&gt; 也就是说，Docker 引擎里同时存在两个 &lt;code&gt;librespeed_default&lt;/code&gt; 网络——两个 ID、两个 &lt;code&gt;Created&lt;/code&gt; 时间、两个 &lt;code&gt;com.docker.compose.config-hash&lt;/code&gt;，但名字一模一样。Compose 启动时让引擎去 lookup 名字，引擎说「我选不出来」，compose up 失败，Portainer 把这条错误原样包成 500 退给浏览器。&lt;/p&gt;&#xA;&lt;p&gt;修复办法朴素到尴尬：在引擎上&lt;strong&gt;删掉其中一个孤儿网络&lt;/strong&gt;（&lt;code&gt;docker network rm &amp;lt;id&amp;gt;&lt;/code&gt; 或在 Portainer 的 Networks 里点 Remove），再原样点一次 Update the stack，就过了。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;这篇文章源于一次真实的 stack 改挂载路径的过程。全程我已经把所有内网地址、镜像仓库地址、卷挂载路径、容器名、用户名密码用 &lt;code&gt;&amp;lt;PLACEHOLDER&amp;gt;&lt;/code&gt; 替换，只保留公开信息、官方源码、错误文本这些可分享的内容。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
