This commit is contained in:
HoneyBBQ
2026-02-26 12:21:05 +00:00
parent 31188f120e
commit a9f2e5cfd9
48 changed files with 184 additions and 190 deletions
+3 -3
View File
@@ -9,9 +9,9 @@
<link rel="preload stylesheet" href="/assets/style.BPi_7-V7.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.D-Qg-UCv.js"></script>
<script type="module" src="/assets/app.CD9R37In.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.g0QZU-ka.js">
<link rel="modulepreload" href="/assets/chunks/theme.Dzd8uadc.js">
<link rel="modulepreload" href="/assets/chunks/framework.ePeAWSvT.js">
<link rel="modulepreload" href="/assets/troubleshooting.md.rkMlAGoL.lean.js">
<link rel="icon" href="/logo.png">
@@ -23,7 +23,7 @@
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">data_root = </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;/opt/memoh/data&quot;</span></span></code></pre></div><ol start="2"><li>Clean up the stale containerd container (if it exists):</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> exec</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> memoh-containerd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ctr</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> default</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> containers</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> rm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mcp-</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">bot-i</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">d</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span></span></code></pre></div><ol start="3"><li>Restart the server:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> compose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> restart</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> server</span></span></code></pre></div><blockquote><p><strong>Note</strong>: If you also run the server locally (outside Docker), keep the Docker config (<code>conf/app.docker.toml</code>) separate from your local <code>config.toml</code>, and update <code>docker-compose.yml</code> to mount the Docker-specific config instead.</p></blockquote><h2 id="mcp-container-image-update-not-taking-effect-after-rebuild" tabindex="-1">MCP Container: Image update not taking effect after rebuild <a class="header-anchor" href="#mcp-container-image-update-not-taking-effect-after-rebuild" aria-label="Permalink to &quot;MCP Container: Image update not taking effect after rebuild&quot;"></a></h2><h3 id="symptom-1" tabindex="-1">Symptom <a class="header-anchor" href="#symptom-1" aria-label="Permalink to &quot;Symptom&quot;"></a></h3><p>After updating <code>Dockerfile.containerd</code> (e.g., adding Node.js/Python to the MCP image), rebuilding and restarting the containerd container, MCP tools still fail with errors like:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>exec: &quot;npx&quot;: executable file not found in $PATH</span></span></code></pre></div><h3 id="cause-1" tabindex="-1">Cause <a class="header-anchor" href="#cause-1" aria-label="Permalink to &quot;Cause&quot;"></a></h3><p>The containerd entrypoint script (<code>containerd-entrypoint.sh</code>) skips image import if the image already exists in containerd&#39;s image store:</p><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">if</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> !</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> ctr</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> default</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> images</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> check</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;name==${</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">MCP_IMAGE</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">}&quot;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">; </span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">then</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # import</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">fi</span></span></code></pre></div><p>Since <code>containerd_data</code> is a persistent Docker volume, the old MCP image survives across container restarts. The new image embedded in the rebuilt Docker image is never imported.</p><h3 id="solution-1" tabindex="-1">Solution <a class="header-anchor" href="#solution-1" aria-label="Permalink to &quot;Solution&quot;"></a></h3><ol><li>Remove the old MCP image from containerd:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> exec</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> memoh-containerd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ctr</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> default</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> images</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> rm</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> docker.io/library/memoh-mcp:latest</span></span></code></pre></div><ol start="2"><li>Restart the containerd container to trigger re-import:</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> compose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> restart</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> containerd</span></span></code></pre></div><ol start="3"><li>Verify the new image was imported (size should be significantly larger if Node.js/Python were added):</li></ol><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> exec</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> memoh-containerd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ctr</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -n</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> default</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> images</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ls</span></span></code></pre></div><ol start="4"><li>Delete the bot&#39;s MCP container and recreate it from the bot detail page so it uses the new image.</li></ol></div></div></main><footer class="VPDocFooter" data-v-a98d3285 data-v-cd4d56d3><!--[--><!--]--><div class="edit-info" data-v-cd4d56d3><div class="edit-link" data-v-cd4d56d3><a class="VPLink link vp-external-link-icon no-icon edit-link-button" href="https://github.com/memohai/Memoh/edit/main/docs/docs/troubleshooting.md" target="_blank" rel="noreferrer" data-v-cd4d56d3><!--[--><span class="vpi-square-pen edit-link-icon" data-v-cd4d56d3></span> Edit on GitHub<!--]--></a></div><div class="last-updated" data-v-cd4d56d3><p class="VPLastUpdated" data-v-cd4d56d3 data-v-868b2e6d>Last Updated: <time datetime="2026-02-18T16:20:27.000Z" data-v-868b2e6d></time></p></div></div><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-cd4d56d3><span class="visually-hidden" id="doc-footer-aria-label" data-v-cd4d56d3>Pager</span><div class="pager" data-v-cd4d56d3><!----></div><div class="pager" data-v-cd4d56d3><a class="VPLink link pager-link next" href="/index.html" data-v-cd4d56d3><!--[--><span class="desc" data-v-cd4d56d3>Next page</span><span class="title" data-v-cd4d56d3>Overview</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter has-sidebar" data-v-0b622e3d data-v-7ace51a1><div class="container" data-v-7ace51a1><p class="message" data-v-7ace51a1>Published under AGPLv3</p><p class="copyright" data-v-7ace51a1>Copyright © 2024 Memoh</p></div></footer><!--[--><!--]--></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"blogs_2026-02-16.md\":\"CVgn4GCU\",\"blogs_index.md\":\"DyCOc_Zm\",\"cli_auth.md\":\"C8ws3CHD\",\"cli_bot.md\":\"BnhEB6FG\",\"cli_channel.md\":\"BBEJiWrG\",\"cli_chat.md\":\"Cr9VFV7R\",\"cli_config.md\":\"B8bSu8j2\",\"cli_index.md\":\"CZsWbIpX\",\"cli_model.md\":\"DjdZHTvQ\",\"cli_provider.md\":\"D1oztYQ9\",\"cli_schedule.md\":\"D2s8Q1KC\",\"concepts_bot.md\":\"C_C3siLW\",\"concepts_channel.md\":\"DdS-uyu8\",\"concepts_container.md\":\"Djausou_\",\"concepts_conversation-and-history.md\":\"BS_PnG4v\",\"concepts_index.md\":\"Ci6EwNPX\",\"concepts_mcp.md\":\"B9KnE-R7\",\"concepts_memory.md\":\"BgBEcLnX\",\"concepts_provider-and-model.md\":\"DQq3j0ql\",\"concepts_schedule.md\":\"COs_2DXO\",\"concepts_skills.md\":\"HeUi2diL\",\"concepts_subagents.md\":\"C0_bz0wW\",\"getting-started.md\":\"C9lgqnN0\",\"getting-started_create-bot.md\":\"Da6WTI-u\",\"getting-started_platform-telegram.md\":\"BlTohjMj\",\"getting-started_provider-and-model.md\":\"hf8EhYPV\",\"index.md\":\"BXBUN2vU\",\"installation_config-toml.md\":\"BJygOlxN\",\"installation_docker.md\":\"Cmz-MLJu\",\"troubleshooting.md\":\"rkMlAGoL\",\"zh_concepts_identity-and-binding.md\":\"B6I6pSqI\",\"zh_concepts_index.md\":\"uaZIblvt\",\"zh_index.md\":\"DbGu2QT1\",\"zh_style_terminology.md\":\"C89A7q1C\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Memoh Documentation\",\"description\":\"Multi-Member, Structured Long-Memory, Containerized AI Agent System.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"siteTitle\":\"Memoh\",\"sidebar\":{\"/blogs/\":[{\"text\":\"Blogs\",\"link\":\"/blogs/index.md\",\"items\":[{\"text\":\"Introduction (Feb 2026)\",\"link\":\"/blogs/2026-02-16.md\"}]}],\"/\":[{\"text\":\"Overview\",\"link\":\"/index.md\"},{\"text\":\"About Memoh\",\"link\":\"/getting-started.md\"},{\"text\":\"Installation\",\"items\":[{\"text\":\"Docker\",\"link\":\"/installation/docker.md\"},{\"text\":\"config.toml\",\"link\":\"/installation/config-toml.md\"}]},{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Provider and Model\",\"link\":\"/getting-started/provider-and-model.md\"},{\"text\":\"Create Bot\",\"link\":\"/getting-started/create-bot.md\"},{\"text\":\"telegram platform\",\"link\":\"/getting-started/platform-telegram.md\"}]},{\"text\":\"Concepts\",\"items\":[{\"text\":\"Overview\",\"link\":\"/concepts/index.md\"},{\"text\":\"Bot\",\"link\":\"/concepts/bot.md\"},{\"text\":\"Provider and Model\",\"link\":\"/concepts/provider-and-model.md\"},{\"text\":\"Schedule\",\"link\":\"/concepts/schedule.md\"},{\"text\":\"Memory\",\"link\":\"/concepts/memory.md\"},{\"text\":\"Channel\",\"link\":\"/concepts/channel.md\"},{\"text\":\"Container\",\"link\":\"/concepts/container.md\"},{\"text\":\"MCP\",\"link\":\"/concepts/mcp.md\"},{\"text\":\"Subagents\",\"link\":\"/concepts/subagents.md\"},{\"text\":\"Skills\",\"link\":\"/concepts/skills.md\"},{\"text\":\"Conversation and History\",\"link\":\"/concepts/conversation-and-history.md\"}]}],\"/zh/\":[{\"text\":\"文档总览\",\"link\":\"/zh/index.md\"}]},\"nav\":[{\"text\":\"Guides\",\"link\":\"/\"},{\"text\":\"Blogs\",\"link\":\"/blogs/\"}],\"logo\":{\"src\":\"/logo.png\",\"alt\":\"Memoh\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/memohai/Memoh\"}],\"footer\":{\"message\":\"Published under AGPLv3\",\"copyright\":\"Copyright © 2024 Memoh\"},\"search\":{\"provider\":\"local\"},\"editLink\":{\"pattern\":\"https://github.com/memohai/Memoh/edit/main/docs/docs/:path\",\"text\":\"Edit on GitHub\"},\"lastUpdated\":{\"text\":\"Last Updated\",\"formatOptions\":{\"dateStyle\":\"short\",\"timeStyle\":\"medium\"}}},\"locales\":{\"root\":{\"label\":\"English\",\"lang\":\"en\"},\"zh\":{\"label\":\"简体中文\",\"lang\":\"zh\"}},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"blogs_2026-02-16.md\":\"CVgn4GCU\",\"blogs_index.md\":\"DyCOc_Zm\",\"cli_auth.md\":\"C8ws3CHD\",\"cli_bot.md\":\"BnhEB6FG\",\"cli_channel.md\":\"BBEJiWrG\",\"cli_chat.md\":\"Cr9VFV7R\",\"cli_config.md\":\"B8bSu8j2\",\"cli_index.md\":\"CZsWbIpX\",\"cli_model.md\":\"DjdZHTvQ\",\"cli_provider.md\":\"D1oztYQ9\",\"cli_schedule.md\":\"D2s8Q1KC\",\"concepts_bot.md\":\"C_C3siLW\",\"concepts_channel.md\":\"DdS-uyu8\",\"concepts_container.md\":\"Djausou_\",\"concepts_conversation-and-history.md\":\"BS_PnG4v\",\"concepts_index.md\":\"Ci6EwNPX\",\"concepts_mcp.md\":\"B9KnE-R7\",\"concepts_memory.md\":\"BgBEcLnX\",\"concepts_provider-and-model.md\":\"DQq3j0ql\",\"concepts_schedule.md\":\"COs_2DXO\",\"concepts_skills.md\":\"HeUi2diL\",\"concepts_subagents.md\":\"C0_bz0wW\",\"getting-started.md\":\"C9lgqnN0\",\"getting-started_create-bot.md\":\"Da6WTI-u\",\"getting-started_platform-telegram.md\":\"BlTohjMj\",\"getting-started_provider-and-model.md\":\"hf8EhYPV\",\"index.md\":\"BXBUN2vU\",\"installation_config-toml.md\":\"BasYU7hp\",\"installation_docker.md\":\"Ce3JA8xc\",\"troubleshooting.md\":\"rkMlAGoL\",\"zh_concepts_identity-and-binding.md\":\"B6I6pSqI\",\"zh_concepts_index.md\":\"uaZIblvt\",\"zh_index.md\":\"DbGu2QT1\",\"zh_style_terminology.md\":\"C89A7q1C\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Memoh Documentation\",\"description\":\"Multi-Member, Structured Long-Memory, Containerized AI Agent System.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"siteTitle\":\"Memoh\",\"sidebar\":{\"/blogs/\":[{\"text\":\"Blogs\",\"link\":\"/blogs/index.md\",\"items\":[{\"text\":\"Introduction (Feb 2026)\",\"link\":\"/blogs/2026-02-16.md\"}]}],\"/\":[{\"text\":\"Overview\",\"link\":\"/index.md\"},{\"text\":\"About Memoh\",\"link\":\"/getting-started.md\"},{\"text\":\"Installation\",\"items\":[{\"text\":\"Docker\",\"link\":\"/installation/docker.md\"},{\"text\":\"config.toml\",\"link\":\"/installation/config-toml.md\"}]},{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Provider and Model\",\"link\":\"/getting-started/provider-and-model.md\"},{\"text\":\"Create Bot\",\"link\":\"/getting-started/create-bot.md\"},{\"text\":\"telegram platform\",\"link\":\"/getting-started/platform-telegram.md\"}]},{\"text\":\"Concepts\",\"items\":[{\"text\":\"Overview\",\"link\":\"/concepts/index.md\"},{\"text\":\"Bot\",\"link\":\"/concepts/bot.md\"},{\"text\":\"Provider and Model\",\"link\":\"/concepts/provider-and-model.md\"},{\"text\":\"Schedule\",\"link\":\"/concepts/schedule.md\"},{\"text\":\"Memory\",\"link\":\"/concepts/memory.md\"},{\"text\":\"Channel\",\"link\":\"/concepts/channel.md\"},{\"text\":\"Container\",\"link\":\"/concepts/container.md\"},{\"text\":\"MCP\",\"link\":\"/concepts/mcp.md\"},{\"text\":\"Subagents\",\"link\":\"/concepts/subagents.md\"},{\"text\":\"Skills\",\"link\":\"/concepts/skills.md\"},{\"text\":\"Conversation and History\",\"link\":\"/concepts/conversation-and-history.md\"}]}],\"/zh/\":[{\"text\":\"文档总览\",\"link\":\"/zh/index.md\"}]},\"nav\":[{\"text\":\"Guides\",\"link\":\"/\"},{\"text\":\"Blogs\",\"link\":\"/blogs/\"}],\"logo\":{\"src\":\"/logo.png\",\"alt\":\"Memoh\"},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/memohai/Memoh\"}],\"footer\":{\"message\":\"Published under AGPLv3\",\"copyright\":\"Copyright © 2024 Memoh\"},\"search\":{\"provider\":\"local\"},\"editLink\":{\"pattern\":\"https://github.com/memohai/Memoh/edit/main/docs/docs/:path\",\"text\":\"Edit on GitHub\"},\"lastUpdated\":{\"text\":\"Last Updated\",\"formatOptions\":{\"dateStyle\":\"short\",\"timeStyle\":\"medium\"}}},\"locales\":{\"root\":{\"label\":\"English\",\"lang\":\"en\"},\"zh\":{\"label\":\"简体中文\",\"lang\":\"zh\"}},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
</body>
</html>