<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Docker &#8211; 岁月细碎点滴快查</title>
	<atom:link href="https://blog.mutadecheng.com/category/docker/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.mutadecheng.com</link>
	<description></description>
	<lastBuildDate>Wed, 14 Jan 2026 04:02:32 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Watchtower 实现自动化容器更新</title>
		<link>https://blog.mutadecheng.com/2026/01/14/watchtower-%e5%ae%9e%e7%8e%b0%e8%87%aa%e5%8a%a8%e5%8c%96%e5%ae%b9%e5%99%a8%e6%9b%b4%e6%96%b0/</link>
		
		<dc:creator><![CDATA[木它]]></dc:creator>
		<pubDate>Wed, 14 Jan 2026 04:02:30 +0000</pubDate>
				<category><![CDATA[DI/CI]]></category>
		<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://blog.mutadecheng.com/?p=676</guid>

					<description><![CDATA[在日常的容器化部署中，应用的镜像经常会有新版本发布。手动更新和重启容器既繁琐又容易出错。为了解决这一问题，我们 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>在日常的容器化部署中，应用的镜像经常会有新版本发布。手动更新和重启容器既繁琐又容易出错。为了解决这一问题，我们可以借助 <a href="https://containrrr.dev/watchtower/">Watchtower</a> 工具，实现容器的自动化更新。本文将结合一个实际的 <code>docker-compose.yml</code> 配置，详细讲解如何配置和使用 Watchtower。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">什么是 Watchtower？</h2>



<p>Watchtower 是一个开源工具，用于自动监控和更新运行中的 Docker 容器。当检测到关联镜像有新版本时，Watchtower 会自动拉取新镜像，重建并重启对应的容器。这样可以实现应用的自动“滚动升级”，极大提升运维效率。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Docker Compose 配置示例</h2>



<p>下面是一个典型的 <code>docker-compose.yml</code> 配置片段，加入了 Watchtower 服务：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="version: &quot;3.8&quot;

services: 

  watchtower:
    image: registry.cn-beijing.aliyuncs.com/muta/watchtower:amd64
    restart: unless-stopped
    # 挂载 docker.sock 以便 Watchtower 能管理容器
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.docker/:/config/
    environment:
      - DOCKER_CONFIG=/config
    # 监控项目的容器（tuechpresentation-api-1），这样不会影响其他容器
    command: --cleanup --interval 60 tuechpresentation-api-1" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">version</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;3.8&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">services</span><span style="color: #D4D4D4">: </span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">watchtower</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">image</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">registry.cn-beijing.aliyuncs.com/muta/watchtower:amd64</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">restart</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">unless-stopped</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># 挂载 docker.sock 以便 Watchtower 能管理容器</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">volumes</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">/var/run/docker.sock:/var/run/docker.sock</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">/root/.docker/:/config/</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">environment</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">DOCKER_CONFIG=/config</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># 监控项目的容器（tuechpresentation-api-1），这样不会影响其他容器</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">command</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">--cleanup --interval 60 tuechpresentation-api-1</span></span></code></pre></div>



<p>下面我们详细解释每一部分的作用。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">配置详解</h2>



<h3 class="wp-block-heading">1. 镜像设置</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="image: registry.cn-beijing.aliyuncs.com/muta/watchtower:amd64" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">image</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">registry.cn-beijing.aliyuncs.com/muta/watchtower:amd64</span></span></code></pre></div>



<p>这里使用的是阿里云镜像仓库中的 Watchtower 镜像，适合国内用户加速下载。</p>



<h3 class="wp-block-heading">2. 容器重启策略</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="restart: unless-stopped" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">restart</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">unless-stopped</span></span></code></pre></div>



<p>表示除非手动停止容器，否则 Watchtower 会一直保持运行状态。</p>



<h3 class="wp-block-heading">3. 挂载 Docker Socket</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="volumes:
  - /var/run/docker.sock:/var/run/docker.sock
  - /root/.docker/:/config/" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">volumes</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">  - </span><span style="color: #CE9178">/var/run/docker.sock:/var/run/docker.sock</span></span>
<span class="line"><span style="color: #D4D4D4">  - </span><span style="color: #CE9178">/root/.docker/:/config/</span></span></code></pre></div>



<ul class="wp-block-list">
<li><code>/var/run/docker.sock:/var/run/docker.sock</code><br>Watchtower 需要通过 Docker 的 Unix Socket 与 Docker Daemon 通信，从而管理和重启其他容器。</li>



<li><code>/root/.docker/:/config/</code><br>挂载主机上的 Docker 配置目录，便于 Watchtower 使用 Docker 配置（如私有仓库认证信息等）。</li>
</ul>



<h3 class="wp-block-heading">4. 环境变量</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="environment:
  - DOCKER_CONFIG=/config" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">environment</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">  - </span><span style="color: #CE9178">DOCKER_CONFIG=/config</span></span></code></pre></div>



<p>指定 Docker 配置的路径为 <code>/config</code>，即上面挂载的 <code>/root/.docker/</code>。</p>



<h3 class="wp-block-heading">5. 启动命令</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="command: --cleanup --interval 60 tuechpresentation-api-1" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">command</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">--cleanup --interval 60 tuechpresentation-api-1</span></span></code></pre></div>



<ul class="wp-block-list">
<li><code>--cleanup</code><br>更新后自动删除旧的无用镜像，节省磁盘空间。</li>



<li><code>--interval 60</code><br>每 60 秒检查一次镜像是否有更新。</li>



<li><code>tuechpresentation-api-1</code><br>只监控名为 <code>tuechpresentation-api-1</code> 的容器，不会影响其他容器的运行和更新。</li>
</ul>



<p>这样配置后，Watchtower 只会自动更新指定的 API 容器，非常适合只希望自动维护某个服务的场景。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">使用建议</h2>



<ul class="wp-block-list">
<li><strong>安全性</strong>：挂载 Docker Socket 具有一定风险，建议只在可信环境下使用。</li>



<li><strong>精细化控制</strong>：通过在 command 部分指定容器名，可以避免 Watchtower 无差别地更新所有容器，更加灵活。</li>



<li><strong>日志查看</strong>：可以通过 <code>docker logs watchtower</code> 查看 Watchtower 的工作日志，了解其自动更新的动态。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">总结</h2>



<p>通过在 Docker Compose 中集成 Watchtower，可以实现容器的自动更新，极大降低了运维成本。合理配置后，还能做到只更新指定容器，安全高效。你可以根据自己的实际需求调整监控容器的范围和更新频率，让你的 Docker 环境始终保持最新和安全。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Portainer 基础知识</title>
		<link>https://blog.mutadecheng.com/2025/12/29/portainer-%e5%9f%ba%e7%a1%80%e7%9f%a5%e8%af%86/</link>
		
		<dc:creator><![CDATA[木它]]></dc:creator>
		<pubDate>Mon, 29 Dec 2025 03:48:11 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://blog.mutadecheng.com/?p=644</guid>

					<description><![CDATA[Portainer 入门详解教程 —— 用安卓应用商店类比，帮助初学者轻松理解 前言 对于很多初学者来说，Po [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Portainer 入门详解教程 —— 用安卓应用商店类比，帮助初学者轻松理解</p>



<p>前言</p>



<p>        对于很多初学者来说，Portainer 这个工具可能比较陌生。其实，Portainer 的作用和安卓手机上的“应用商店”非常类似。应用商店让我们方便地安装、管理和卸载各种手机应用，而 Portainer 则让我们在服务器上用可视化方式管理 Docker 容器（各种服务器应用）。本教程将用详细的类比和表格，帮助初学者快速理解 Portainer 的各项功能和实际操作细节。</p>



<p>一、Portainer 与安卓应用商店功能对照表</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>功能/场景</th><th>Portainer 细节说明</th><th>安卓应用商店细节说明</th></tr></thead><tbody><tr><td>管理对象</td><td>管理服务器上的 Docker 容器和镜像，包括应用、数据库等</td><td>管理手机上的各类应用</td></tr><tr><td>安装方式</td><td>需要先安装 Docker，然后通过命令或图形界面部署 Portainer</td><td>手机厂商预装或用户下载应用商店</td></tr><tr><td>应用安装</td><td>选择镜像或模板，填写参数，设置端口、存储路径等，点击部署</td><td>搜索应用，确认权限，点击安装</td></tr><tr><td>应用卸载</td><td>停止并删除容器，必要时清理相关数据和镜像</td><td>长按应用图标或在应用商店中卸载</td></tr><tr><td>应用启动/停止</td><td>选择容器，点击启动或停止，支持一键操作</td><td>点击应用图标打开或关闭</td></tr><tr><td>更新应用</td><td>拉取新镜像，重新部署容器，注意数据备份和兼容性</td><td>应用商店提示更新，点击升级</td></tr><tr><td>查看日志</td><td>进入容器详情页，查看实时日志，支持过滤和搜索错误信息</td><td>开发者选项或应用详情中查看崩溃日志</td></tr><tr><td>权限管理</td><td>支持多用户登录，分配不同角色和权限，适合团队协作</td><td>账号管理，家长控制、隐私权限设置</td></tr><tr><td>应用分类</td><td>分类展示常用服务类型，如数据库、内容管理、工具等</td><td>社交、游戏、工具等应用分类</td></tr><tr><td>多平台管理</td><td>可同时管理本地和远程服务器上的容器，适合多台设备场景</td><td>多台手机或平板统一管理应用</td></tr></tbody></table></figure>



<p>二、Portainer 安装与初次使用细节</p>



<ol class="wp-block-list">
<li>安装 Docker</li>
</ol>



<ul class="wp-block-list">
<li>Portainer 依赖 Docker 环境，需先在服务器上安装好 Docker。类似于安卓系统必须先准备好，才能安装应用商店。</li>



<li>初学者推荐在干净的服务器或虚拟机上操作，避免环境冲突。</li>
</ul>



<ol class="wp-block-list">
<li>部署 Portainer</li>
</ol>



<ul class="wp-block-list">
<li>Portainer 本身也是一个容器应用。部署后，会自动生成管理界面，通常通过浏览器访问。</li>



<li>访问方式为：http://服务器IP:9000，首次进入需要设置管理员账号和密码，确保安全性。</li>
</ul>



<ol class="wp-block-list">
<li>首次登录</li>
</ol>



<ul class="wp-block-list">
<li>建议初学者使用强密码，并妥善保存账号信息。</li>



<li>登录后会看到主界面，包括管理节点、容器、镜像、网络、卷等模块。</li>
</ul>



<p>三、Portainer 图形界面与应用商店界面细节对比</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Portainer 页面</th><th>安卓应用商店页面</th><th>细节说明</th></tr></thead><tbody><tr><td>首页（Home）</td><td>推荐页/首页</td><td>展示所有已管理的环境和服务，快速入口</td></tr><tr><td>容器列表（Containers）</td><td>已安装应用列表</td><td>展示已安装和运行的所有容器，支持筛选、排序、批量操作</td></tr><tr><td>镜像库（Images）</td><td>应用市场库</td><td>展示可用的容器镜像，相当于应用安装包，可手动拉取或删除</td></tr><tr><td>应用模板（App Templates）</td><td>精品推荐/分类应用</td><td>一键部署常用服务，内置参数简化部署流程，适合初学者</td></tr><tr><td>日志（Logs）</td><td>应用详情/崩溃日志</td><td>实时展示容器输出和运行日志，支持搜索错误信息</td></tr><tr><td>用户与权限（Users）</td><td>账号/家长控制</td><td>添加和管理不同用户，分配管理权限，适合多人协作</td></tr><tr><td>设置（Settings）</td><td>应用商店设置</td><td>配置 Portainer 的基本参数，包括界面语言、通知等</td></tr></tbody></table></figure>



<p>四、典型操作场景细节讲解</p>



<ol class="wp-block-list">
<li>安装新容器服务（如 WordPress 网站）</li>
</ol>



<ul class="wp-block-list">
<li>在应用模板中找到 WordPress，点击部署。</li>



<li>细致填写数据库密码、端口号等参数，确认后即可自动完成安装。</li>



<li>部署后自动跳转到容器列表，可一键启动、停止或重启服务。</li>



<li>类似于在应用商店中搜索微信，点击安装，填写账号信息后即可使用。</li>
</ul>



<ol class="wp-block-list">
<li>启动或停止容器</li>
</ol>



<ul class="wp-block-list">
<li>容器列表中，每个容器都有启动、停止、重启按钮。</li>



<li>可根据需要灵活操作，适合测试和维护环境。</li>



<li>类比于手机上打开或关闭应用。</li>
</ul>



<ol class="wp-block-list">
<li>卸载容器服务</li>
</ol>



<ul class="wp-block-list">
<li>停止容器后，点击删除即可完成卸载。</li>



<li>建议初学者在删除前备份重要数据（如数据库内容），避免误删。</li>



<li>类似于卸载手机应用时确认是否保留数据。</li>
</ul>



<ol class="wp-block-list">
<li>更新容器应用</li>
</ol>



<ul class="wp-block-list">
<li>检查镜像库是否有新版本，拉取最新镜像后重建容器。</li>



<li>更新前建议备份数据，并确认新版本兼容性。</li>



<li>类比于应用商店提示应用有新版本时，点击升级按钮。</li>
</ul>



<ol class="wp-block-list">
<li>查看容器日志</li>
</ol>



<ul class="wp-block-list">
<li>容器详情页可实时查看运行日志，支持搜索关键字（如“error”、“failed”）。</li>



<li>日志可帮助排查启动失败、配置错误等问题，是运维必备工具。</li>



<li>类似于应用崩溃后查看日志定位问题。</li>
</ul>



<p>五、常见问题与细节排查方法</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>问题场景</th><th>Portainer 细节排查方法</th><th>安卓应用商店类比说明</th></tr></thead><tbody><tr><td>容器无法启动</td><td>查看日志，检查端口冲突、环境变量设置、依赖问题</td><td>应用打不开，检查网络或重启手机</td></tr><tr><td>镜像下载慢或失败</td><td>切换国内镜像源，检查网络连接，重试拉取</td><td>应用下载缓慢，切换 Wi-Fi 或移动网络</td></tr><tr><td>权限不足</td><td>检查用户角色，调整权限设置，避免误操作</td><td>家长控制或权限限制导致无法安装应用</td></tr><tr><td>占用资源过多</td><td>停止或删除不常用容器，释放服务器内存和存储空间</td><td>清理不常用应用，释放手机空间</td></tr><tr><td>版本兼容性问题</td><td>查看容器日志，确认 Docker 和镜像版本匹配</td><td>应用不兼容当前系统版本，升级或降级系统</td></tr></tbody></table></figure>



<p>六、进阶建议</p>



<ul class="wp-block-list">
<li>初学者可优先使用模板部署常用服务，熟悉参数填写和基本管理流程。</li>



<li>建议定期查看容器日志，及时发现和解决潜在问题。</li>



<li>多用户协作时，合理分配权限，避免误操作影响整个环境。</li>



<li>学习数据卷和网络管理，提高服务的稳定性和安全性。</li>



<li>探索远程节点管理，适合多台服务器或云平台场景。</li>
</ul>



<p>结语</p>



<p>Portainer 就像服务器世界里的“应用商店”，让初学者无需复杂命令，就能像管理手机应用一样，轻松管理服务器上的各种服务。通过图形界面、详细日志和丰富模板，Portainer 不仅提升了管理效率，也降低了运维门槛。建议初学者在实践中多尝试、多探索，逐步掌握容器化应用的管理技巧。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>使用 Docker 和 Ultralytics YOLOv8 训练自定义目标检测模型全流程</title>
		<link>https://blog.mutadecheng.com/2025/12/18/%e4%bd%bf%e7%94%a8-docker-%e5%92%8c-ultralytics-yolov8-%e8%ae%ad%e7%bb%83%e8%87%aa%e5%ae%9a%e4%b9%89%e7%9b%ae%e6%a0%87%e6%a3%80%e6%b5%8b%e6%a8%a1%e5%9e%8b%e5%85%a8%e6%b5%81%e7%a8%8b/</link>
					<comments>https://blog.mutadecheng.com/2025/12/18/%e4%bd%bf%e7%94%a8-docker-%e5%92%8c-ultralytics-yolov8-%e8%ae%ad%e7%bb%83%e8%87%aa%e5%ae%9a%e4%b9%89%e7%9b%ae%e6%a0%87%e6%a3%80%e6%b5%8b%e6%a8%a1%e5%9e%8b%e5%85%a8%e6%b5%81%e7%a8%8b/#respond</comments>
		
		<dc:creator><![CDATA[木它]]></dc:creator>
		<pubDate>Thu, 18 Dec 2025 05:30:08 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[YOLO]]></category>
		<guid isPermaLink="false">https://blog.mutadecheng.com/?p=468</guid>

					<description><![CDATA[前言 最近在学习目标检测，想用 Ultralytics 的 YOLOv8 框架训练自己拍摄的“蓝色黄色小球”数 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">前言</h2>



<p>最近在学习目标检测，想用 Ultralytics 的 YOLOv8 框架训练自己拍摄的“蓝色黄色小球”数据集。由于本地环境复杂，决定用 Docker 来隔离环境，保证依赖一致性。本文记录整个流程，便于以后复用和查阅。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">1. 准备工作</h2>



<h3 class="wp-block-heading">1.1 安装 Docker</h3>



<p>请确保电脑已安装 <a href="https://www.docker.com/products/docker-desktop/">Docker Desktop</a>，并且已开启 GPU 支持（NVIDIA 驱动 &amp; CUDA 已配置好）。</p>



<h3 class="wp-block-heading">1.2 检查 GPU 驱动</h3>



<p>在命令行（PowerShell）输入：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="nvidia-smi" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">nvidia-smi</span></span></code></pre></div>



<p>如果能看到显卡信息，说明驱动没问题。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2. 数据集准备</h2>



<p>我的数据集结构如下：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="E:\
└── 机器学习训练集\
    └── 蓝色黄色小球\
        └── boll\
            ├── train\
            │    ├── images\
            │    └── labels\
            └── val\
                 ├── images\
                 └── labels\" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">E:\</span></span>
<span class="line"><span style="color: #D4D4D4">└── </span><span style="color: #CE9178">机器学习训练集</span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #CE9178">└──</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">蓝色黄色小球</span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #CE9178">└──</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">boll</span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #CE9178">├──</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">train</span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #CE9178">│</span><span style="color: #D4D4D4">    </span><span style="color: #CE9178">├──</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">images</span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #CE9178">│</span><span style="color: #D4D4D4">    </span><span style="color: #CE9178">└──</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">labels</span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #CE9178">└──</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">val</span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">                 </span><span style="color: #CE9178">├──</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">images</span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">                 </span><span style="color: #CE9178">└──</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">labels</span><span style="color: #D7BA7D">\</span></span></code></pre></div>



<ul class="wp-block-list">
<li><code>images</code> 目录下是图片（jpg/png等）</li>



<li><code>labels</code> 目录下是和图片同名的 txt 文件（YOLO 格式标注）</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3. 使用 Docker 启动 YOLO 环境并挂载数据集</h2>



<p>在 PowerShell 中运行如下命令，将本地数据集挂载到 Docker 容器内：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker run -it --ipc=host --gpus all `
  -v &quot;E:/机器学习训练集/蓝色黄色小球/boll:/ultralytics/data/boll&quot; `
  ultralytics/ultralytics:latest" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-it</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--ipc=host</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--gpus</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">all</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">`</span></span>
<span class="line"><span style="color: #CE9178">  </span><span style="color: #DCDCAA">-v</span><span style="color: #CE9178"> &quot;E:/机器学习训练集/蓝色黄色小球/boll:/ultralytics/data/boll&quot; `</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #DCDCAA">ultralytics/ultralytics:latest</span></span></code></pre></div>



<ul class="wp-block-list">
<li><code>-v</code> 参数用于挂载本地目录到容器内部。</li>



<li>挂载后，容器内的数据路径为 <code>/ultralytics/data/boll</code>。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4. 准备 data.yaml 配置文件</h2>



<p>在本地 <code>E:/机器学习训练集/蓝色黄色小球/boll/</code> 下新建 <code>data.yaml</code> 文件，内容如下：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="train: /ultralytics/data/boll/train/images
val: /ultralytics/data/boll/val/images

nc: 2
names: ['blue_ball', 'yellow_ball']" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">train</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">/ultralytics/data/boll/train/images</span></span>
<span class="line"><span style="color: #569CD6">val</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">/ultralytics/data/boll/val/images</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">nc</span><span style="color: #D4D4D4">: </span><span style="color: #B5CEA8">2</span></span>
<span class="line"><span style="color: #569CD6">names</span><span style="color: #D4D4D4">: [</span><span style="color: #CE9178">&#39;blue_ball&#39;</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&#39;yellow_ball&#39;</span><span style="color: #D4D4D4">]</span></span></code></pre></div>



<ul class="wp-block-list">
<li><code>nc</code>：类别数</li>



<li><code>names</code>：类别名称，顺序要和你的标注一致</li>



<li><code>train</code> 和 <code>val</code> 路径要用容器内的挂载路径</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5. 在容器里开始训练</h2>



<p>进入容器后，执行以下命令开始训练：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="yolo task=detect mode=train model=yolov8n.pt data=/ultralytics/data/boll/data.yaml epochs=100 imgsz=640" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">yolo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">task=detect</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">mode=train</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">model=yolov8n.pt</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">data=/ultralytics/data/boll/data.yaml</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">epochs=</span><span style="color: #B5CEA8">100</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">imgsz=</span><span style="color: #B5CEA8">640</span></span></code></pre></div>



<p>参数说明：</p>



<ul class="wp-block-list">
<li><code>model=yolov8n.pt</code>：使用 YOLOv8 nano 预训练模型</li>



<li><code>data</code>：指向 data.yaml 文件</li>



<li><code>epochs</code>：训练轮数</li>



<li><code>imgsz</code>：输入图片尺寸</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6. 查看训练结果</h2>



<p>训练完成后，模型和日志会保存在 <code>/ultralytics/runs/detect/</code> 目录下。</p>



<p>可以通过如下命令查看：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="ls /ultralytics/runs/detect/" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">ls</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/ultralytics/runs/detect/</span></span></code></pre></div>



<p>如果需要把结果拷贝回本地，可用 <code>docker cp</code> 命令。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">7. 常见问题总结</h2>



<ul class="wp-block-list">
<li><strong>路径中有中文或空格</strong>：建议尽量用英文路径，或确保 Docker Desktop 已授权对应盘符。</li>



<li><strong>labels 格式</strong>：务必是 YOLO 标准格式，类别编号从 0 开始。</li>



<li><strong>挂载后目录为空</strong>：请检查路径拼写和 Docker 权限设置。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">8. 参考资料</h2>



<ul class="wp-block-list">
<li><a href="https://docs.ultralytics.com/">Ultralytics YOLO 官方文档</a></li>



<li><a href="https://docs.docker.com/">Docker 官方文档</a></li>



<li></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">9. 用命令行直接导出 YOLO 模型为 ONNX</h2>



<p><code>best.pt</code> 路径确保正确：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="yolo export model=/ultralytics/data/boll/train3/weights/best.pt format=onnx" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">yolo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">export</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">model=/ultralytics/data/boll/train3/weights/best.pt</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">format=onnx</span></span></code></pre></div>



<ul class="wp-block-list">
<li><code>model=...</code> 指定你的 .pt 文件路径</li>



<li><code>format=onnx</code> 指定导出格式为 ONNX</li>
</ul>



<p>导出后会在 <code>runs/</code> 目录下生成对应的 ONNX 文件。</p>



<p>还可以加其他参数，比如指定输出路径、导出的输入尺寸等：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="yolo export model=/ultralytics/data/boll/train3/weights/best.pt format=onnx imgsz=640" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">yolo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">export</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">model=/ultralytics/data/boll/train3/weights/best.pt</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">format=onnx</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">imgsz=</span><span style="color: #B5CEA8">640</span></span></code></pre></div>



<p>更多参数可以用 <code>yolo export --help</code> 查看。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mutadecheng.com/2025/12/18/%e4%bd%bf%e7%94%a8-docker-%e5%92%8c-ultralytics-yolov8-%e8%ae%ad%e7%bb%83%e8%87%aa%e5%ae%9a%e4%b9%89%e7%9b%ae%e6%a0%87%e6%a3%80%e6%b5%8b%e6%a8%a1%e5%9e%8b%e5%85%a8%e6%b5%81%e7%a8%8b/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>在 Docker Compose 中实现容器到宿主机通信——host.docker.internal 与 host-gateway 的实战指南</title>
		<link>https://blog.mutadecheng.com/2025/12/16/%e5%9c%a8-docker-compose-%e4%b8%ad%e5%ae%9e%e7%8e%b0%e5%ae%b9%e5%99%a8%e5%88%b0%e5%ae%bf%e4%b8%bb%e6%9c%ba%e9%80%9a%e4%bf%a1-host-docker-internal-%e4%b8%8e-host-gateway-%e7%9a%84/</link>
					<comments>https://blog.mutadecheng.com/2025/12/16/%e5%9c%a8-docker-compose-%e4%b8%ad%e5%ae%9e%e7%8e%b0%e5%ae%b9%e5%99%a8%e5%88%b0%e5%ae%bf%e4%b8%bb%e6%9c%ba%e9%80%9a%e4%bf%a1-host-docker-internal-%e4%b8%8e-host-gateway-%e7%9a%84/#respond</comments>
		
		<dc:creator><![CDATA[木它]]></dc:creator>
		<pubDate>Tue, 16 Dec 2025 03:28:47 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">https://blog.mutadecheng.com/?p=464</guid>

					<description><![CDATA[一、前言 在容器化开发过程中，常常遇到容器需要访问宿主机上的服务，比如数据库、API 或其他本地应用。对于 m [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">一、前言</h2>



<p>在容器化开发过程中，常常遇到容器需要访问宿主机上的服务，比如数据库、API 或其他本地应用。对于 macOS 和 Windows 用户来说，Docker 官方提供了 host.docker.internal 这个 DNS 名称，方便容器自动识别宿主机。然而，Linux 用户则需要额外配置。自 Docker 20.10 起，host-gateway 关键字极大简化了这一过程。本篇将详细介绍如何在 Docker Compose 中实现容器访问宿主机的最佳实践，并结合实战案例帮助理解。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">二、容器访问宿主机的常见方式</h2>



<p>在 Linux 环境下，容器默认无法通过 host.docker.internal 访问宿主机上的服务。常见的几种做法包括：</p>



<ul class="wp-block-list">
<li><strong>手动指定宿主机 IP</strong>：在 extra_hosts 或命令行中写死宿主机 IP，缺点是 IP 可能变化，维护不便。</li>



<li><strong>使用 network_mode: host</strong>：容器与宿主机共享网络栈，虽然简单，但会牺牲隔离性，且端口暴露风险增加。</li>



<li><strong>利用 host-gateway</strong>：结合 Docker 20.10+ 的新特性，自动将 host.docker.internal 映射到宿主机网关 IP，推荐使用。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">三、Docker 命令行与 Compose 的实现方式</h2>



<h3 class="wp-block-heading">1. 命令行方式</h3>



<p>直接运行容器时，可以用如下参数：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker run \
  --add-host=host.docker.internal:host-gateway \
  <其他参数&gt; \
  <镜像名&gt;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--add-host=host.docker.internal:host-gateway</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  &lt;</span><span style="color: #CE9178">其他参</span><span style="color: #D4D4D4">数&gt; </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  &lt;</span><span style="color: #CE9178">镜像</span><span style="color: #D4D4D4">名&gt;</span></span></code></pre></div>



<p>这样容器内部的 <code>/etc/hosts</code> 会新增一条，把 <code>host.docker.internal</code> 指向宿主机网关 IP。</p>



<h3 class="wp-block-heading">2. Docker Compose 配置</h3>



<p>在 Compose 文件中，使用 <code>extra_hosts</code> 字段实现同样功能：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="version: '3.9'
services:
  app:
    image: <镜像名&gt;
    extra_hosts:
      - &quot;host.docker.internal:host-gateway&quot;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">version</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&#39;3.9&#39;</span></span>
<span class="line"><span style="color: #569CD6">services</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">app</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">image</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&lt;镜像名&gt;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">extra_hosts</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">&quot;host.docker.internal:host-gateway&quot;</span></span></code></pre></div>



<p>Compose 会自动查找 bridge 网络的网关地址，并注入到容器 hosts 文件中，跨平台兼容性极强。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">四、实战案例：容器访问宿主机 HTTP 服务</h2>



<h3 class="wp-block-heading">1. 宿主机启动 HTTP 服务</h3>



<p>在宿主机上运行如下 Python 命令：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="python3 -m http.server 8080" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">python3</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-m</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">http.server</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8080</span></span></code></pre></div>



<p>确保服务监听在 <code>0.0.0.0</code>，方便容器访问。</p>



<h3 class="wp-block-heading">2. 编写 docker-compose.yml</h3>



<p>创建如下 Compose 文件，实现容器内 curl 访问宿主机服务：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="version: '3.9'
services:
  curltest:
    image: curlimages/curl
    command: [&quot;curl&quot;, &quot;http://host.docker.internal:8080&quot;]
    extra_hosts:
      - &quot;host.docker.internal:host-gateway&quot;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">version</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&#39;3.9&#39;</span></span>
<span class="line"><span style="color: #569CD6">services</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">curltest</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">image</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">curlimages/curl</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">command</span><span style="color: #D4D4D4">: [</span><span style="color: #CE9178">&quot;curl&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #CE9178">&quot;http://host.docker.internal:8080&quot;</span><span style="color: #D4D4D4">]</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">extra_hosts</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">&quot;host.docker.internal:host-gateway&quot;</span></span></code></pre></div>



<h3 class="wp-block-heading">3. 启动并验证</h3>



<p>执行：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker-compose up" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">docker-compose</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">up</span></span></code></pre></div>



<p>如能看到 HTTP 服务返回内容，说明配置成功。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">五、常见问题与排查技巧</h2>



<h3 class="wp-block-heading">1. host-gateway 报错</h3>



<ul class="wp-block-list">
<li>报错信息：<code>invalid IP address in add-host: host-gateway</code></li>



<li>原因：Docker 版本过低。请升级至 20.10 或以上。</li>
</ul>



<h3 class="wp-block-heading">2. 无法访问宿主机服务</h3>



<ul class="wp-block-list">
<li>检查服务监听地址必须为 <code>0.0.0.0</code>，否则只在本地回环可用。</li>



<li>查看防火墙设置是否允许 Docker 网络访问指定端口。</li>



<li>确认 Compose 文件 <code>extra_hosts</code> 配置无误。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">六、适用场景与注意事项</h2>



<h3 class="wp-block-heading">适用场景</h3>



<ul class="wp-block-list">
<li>容器需要调用本地数据库或 API</li>



<li>开发环境下调试本地服务</li>



<li>跨平台项目需要兼容性配置</li>
</ul>



<h3 class="wp-block-heading">不推荐做法</h3>



<ul class="wp-block-list">
<li>使用 <code>network_mode: host</code>，丧失网络隔离</li>



<li>手动硬编码宿主机 IP，难以维护</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">七、结语</h2>



<p>通过 <code>extra_hosts</code> 配合 <code>host-gateway</code>，Docker Compose 能方便地实现容器到宿主机的通信，无需关心平台差异，配置简洁且易于迁移。无论是本地开发还是自动化测试，这一技巧都能显著提升开发效率与体验。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>参考资料</strong></p>



<ul class="wp-block-list">
<li><a href="https://docs.docker.com/network/host/">Docker 官方文档</a></li>



<li><a href="https://docs.docker.com/compose/compose-file/compose-versioning/">Docker Compose 说明</a></li>



<li><a href="https://github.com/docker/cli/pull/2664">host-gateway 介绍</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.mutadecheng.com/2025/12/16/%e5%9c%a8-docker-compose-%e4%b8%ad%e5%ae%9e%e7%8e%b0%e5%ae%b9%e5%99%a8%e5%88%b0%e5%ae%bf%e4%b8%bb%e6%9c%ba%e9%80%9a%e4%bf%a1-host-docker-internal-%e4%b8%8e-host-gateway-%e7%9a%84/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Arm 搭建一套传感器采集系统(基于docker)</title>
		<link>https://blog.mutadecheng.com/2025/09/11/arm-%e6%90%ad%e5%bb%ba%e4%b8%80%e5%a5%97%e4%bc%a0%e6%84%9f%e5%99%a8%e9%87%87%e9%9b%86%e7%b3%bb%e7%bb%9f%e5%9f%ba%e4%ba%8edocker/</link>
		
		<dc:creator><![CDATA[木它]]></dc:creator>
		<pubDate>Thu, 11 Sep 2025 07:28:57 +0000</pubDate>
				<category><![CDATA[Arm]]></category>
		<category><![CDATA[Blazor]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Iot]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[前端]]></category>
		<guid isPermaLink="false">https://blog.mutadecheng.com/?p=362</guid>

					<description><![CDATA[架构: 数据库: questdb 前端:blazor server 后端:c#控制台(hostserver)  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>架构:</p>



<p>数据库: questdb</p>



<p>前端:blazor server</p>



<p>后端:c#控制台(hostserver)</p>



<p>平台运维:portainer</p>



<p>容器管理</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="# 国外
docker run -d -p 9000:9000 \
  --name portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:alpine-sts
  
# 国内(Arm64)
docker run -d -p 9000:9000 \
  --name portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  registry.cn-beijing.aliyuncs.com/muta/portainer-ce:alpine-sts-arm64

# 国内(Amd64)
docker run -d -p 9000:9000 \
  --name portainer \
  --restart=always \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  registry.cn-beijing.aliyuncs.com/muta/portainer-ce:alpine-sts-amd64" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955"># 国外</span></span>
<span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-d</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">9000</span><span style="color: #CE9178">:9000</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--name</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">portainer</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--restart=always</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/var/run/docker.sock:/var/run/docker.sock</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">portainer_data:/data</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #CE9178">portainer/portainer-ce:alpine-sts</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #6A9955"># 国内(Arm64)</span></span>
<span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-d</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">9000</span><span style="color: #CE9178">:9000</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--name</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">portainer</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--restart=always</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/var/run/docker.sock:/var/run/docker.sock</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">portainer_data:/data</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #CE9178">registry.cn-beijing.aliyuncs.com/muta/portainer-ce:alpine-sts-arm64</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 国内(Amd64)</span></span>
<span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-d</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">9000</span><span style="color: #CE9178">:9000</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--name</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">portainer</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--restart=always</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/var/run/docker.sock:/var/run/docker.sock</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">portainer_data:/data</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #CE9178">registry.cn-beijing.aliyuncs.com/muta/portainer-ce:alpine-sts-amd64</span></span></code></pre></div>



<p>数据库安装</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="# 国外
docker run -d \
  --name questdb \
  -p 8812:8812 \
  -p 9080:9000 \
  -p 9009:9009 \
  -v questdb_data:/root/.questdb/db \
  questdb/questdb:nightly-rhel
  
# 国内(Arm64)
docker run -d \
  --name questdb \
  -p 8812:8812 \
  -p 9080:9000 \
  -p 9009:9009 \
  -v questdb_data:/root/.questdb/db \
  registry.cn-beijing.aliyuncs.com/muta/questdb:nightly-rhel-arm64

# 国内(Amd64)
docker run -d \
  --name questdb \
  -p 8812:8812 \
  -p 9080:9000 \
  -p 9009:9009 \
  -v questdb_data:/root/.questdb/db \
  registry.cn-beijing.aliyuncs.com/muta/questdb:nightly-rhel-amd64
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955"># 国外</span></span>
<span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-d</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--name</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">questdb</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8812</span><span style="color: #CE9178">:8812</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">9080</span><span style="color: #CE9178">:9000</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">9009</span><span style="color: #CE9178">:9009</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">questdb_data:/root/.questdb/db</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #CE9178">questdb/questdb:nightly-rhel</span></span>
<span class="line"><span style="color: #D4D4D4">  </span></span>
<span class="line"><span style="color: #6A9955"># 国内(Arm64)</span></span>
<span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-d</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--name</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">questdb</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8812</span><span style="color: #CE9178">:8812</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">9080</span><span style="color: #CE9178">:9000</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">9009</span><span style="color: #CE9178">:9009</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">questdb_data:/root/.questdb/db</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #CE9178">registry.cn-beijing.aliyuncs.com/muta/questdb:nightly-rhel-arm64</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 国内(Amd64)</span></span>
<span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-d</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--name</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">questdb</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8812</span><span style="color: #CE9178">:8812</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">9080</span><span style="color: #CE9178">:9000</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">9009</span><span style="color: #CE9178">:9009</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">questdb_data:/root/.questdb/db</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #CE9178">registry.cn-beijing.aliyuncs.com/muta/questdb:nightly-rhel-amd64</span></span>
<span class="line"></span></code></pre></div>



<p>rabbitmq</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="version: '3.8'

services:
  mq:
    image: registry.cn-beijing.aliyuncs.com/muta/rabbitmq:management-arm64 
    restart: always 
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq    # 持久化RabbitMQ数据
    ports:
      - &quot;5672:5672&quot;                        # AMQP协议端口，应用程序连接用
      - &quot;15672:15672&quot;                      # 管理后台端口，Web管理界面用
      # 以下端口仅在集群或特殊情况下需要，可选
      # - &quot;25672:25672&quot;                    # 节点间通信端口（集群用）
      # - &quot;4369:4369&quot;                      # Erlang节点发现端口（集群用）
    logging:
      driver: &quot;json-file&quot;
      options:
        max-size: &quot;100m&quot;
        max-file: &quot;3&quot; 

volumes:
  rabbitmq_data:                           # 定义持久化数据卷
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">version</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&#39;3.8&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">services</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">mq</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">image</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">registry.cn-beijing.aliyuncs.com/muta/rabbitmq:management-arm64</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">restart</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">always</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">volumes</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">rabbitmq_data:/var/lib/rabbitmq</span><span style="color: #D4D4D4">    </span><span style="color: #6A9955"># 持久化RabbitMQ数据</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">ports</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">&quot;5672:5672&quot;</span><span style="color: #D4D4D4">                        </span><span style="color: #6A9955"># AMQP协议端口，应用程序连接用</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">&quot;15672:15672&quot;</span><span style="color: #D4D4D4">                      </span><span style="color: #6A9955"># 管理后台端口，Web管理界面用</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #6A9955"># 以下端口仅在集群或特殊情况下需要，可选</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #6A9955"># - &quot;25672:25672&quot;                    # 节点间通信端口（集群用）</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #6A9955"># - &quot;4369:4369&quot;                      # Erlang节点发现端口（集群用）</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">logging</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">driver</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;json-file&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">options</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">max-size</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;100m&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">max-file</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;3&quot;</span><span style="color: #D4D4D4"> </span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">volumes</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">rabbitmq_data</span><span style="color: #D4D4D4">:                           </span><span style="color: #6A9955"># 定义持久化数据卷</span></span>
<span class="line"></span></code></pre></div>



<p>采集程序(方案1)</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="version: '3.8'

services:
  armcollection2025masablazorapp:
    image: registry.cn-beijing.aliyuncs.com/dfzh/armcollection2025masablazorapp:latest
    ports:
      - &quot;20000:8080&quot;
    user: root
    devices:
      - /dev/ttyS3:/dev/ttyS3
    environment: 
      SqlSugar__1__ConnectionString: &quot;host=host.docker.internal;port=8812;username=admin;password=quest;database=qdb;ServerCompatibilityMode=NoTypeLoading;&quot;
    restart: always
    volumes: 
      - /home/orangepi/DataProtection-Keys/:/app/.aspnet/DataProtection-Keys
    logging:
      driver: &quot;json-file&quot;
      options:
        max-size: &quot;100m&quot;
        max-file: &quot;3&quot;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">version</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&#39;3.8&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">services</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">armcollection2025masablazorapp</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">image</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">registry.cn-beijing.aliyuncs.com/dfzh/armcollection2025masablazorapp:latest</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">ports</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">&quot;20000:8080&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">user</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">root</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">devices</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">/dev/ttyS3:/dev/ttyS3</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">environment</span><span style="color: #D4D4D4">: </span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">SqlSugar__1__ConnectionString</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;host=host.docker.internal;port=8812;username=admin;password=quest;database=qdb;ServerCompatibilityMode=NoTypeLoading;&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">restart</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">always</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">volumes</span><span style="color: #D4D4D4">: </span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">/home/orangepi/DataProtection-Keys/:/app/.aspnet/DataProtection-Keys</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">logging</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">driver</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;json-file&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">options</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">max-size</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;100m&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">max-file</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;3&quot;</span></span></code></pre></div>



<p>采集程序(方案2)</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="version: '3.8'

services:
  app:
    image: registry.cn-beijing.aliyuncs.com/dfzh/armcollectblazorapp:latest
    network_mode: &quot;host&quot; 
    environment:  
      Urls: &quot;http://*:20000&quot;
    restart: always 
    logging:
      driver: &quot;json-file&quot;
      options:
        max-size: &quot;100m&quot;
        max-file: &quot;3&quot;
        
  serialport2questdb:
    image: registry.cn-beijing.aliyuncs.com/dfzh/armcollectserialport2questdb:latest
    network_mode: &quot;host&quot; 
    user: root
    devices:
      - /dev/ttyS3:/dev/ttyS3
    environment:  
      ComPortName : &quot;/dev/ttyS3&quot;
      Urls: &quot;http://*:20002&quot; 
    restart: always 
    logging:
      driver: &quot;json-file&quot;
      options:
        max-size: &quot;100m&quot;
        max-file: &quot;3&quot;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">version</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&#39;3.8&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">services</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">app</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">image</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">registry.cn-beijing.aliyuncs.com/dfzh/armcollectblazorapp:latest</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">network_mode</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;host&quot;</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">environment</span><span style="color: #D4D4D4">:  </span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">Urls</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;http://*:20000&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">restart</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">always</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">logging</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">driver</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;json-file&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">options</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">max-size</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;100m&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">max-file</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;3&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">serialport2questdb</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">image</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">registry.cn-beijing.aliyuncs.com/dfzh/armcollectserialport2questdb:latest</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">network_mode</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;host&quot;</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">user</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">root</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">devices</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">/dev/ttyS3:/dev/ttyS3</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">environment</span><span style="color: #D4D4D4">:  </span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">ComPortName</span><span style="color: #D4D4D4"> : </span><span style="color: #CE9178">&quot;/dev/ttyS3&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">Urls</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;http://*:20002&quot;</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">restart</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">always</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">logging</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">driver</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;json-file&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">options</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">max-size</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;100m&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">max-file</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;3&quot;</span></span></code></pre></div>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="version: '3.8'

services:
  app:
    image: registry.cn-beijing.aliyuncs.com/dfzh/staticforcecalibration-blazorserver:arm64
    restart: always 
    volumes:
      - /home/bjgrst/staticforcecalibration_data:/app/App_Data     
      - /home/bjgrst/DefaultSeedsJsonFiles/:/app/DefaultSeedsJsonFiles
      - /dev:/dev
    ports:
      - &quot;8080:8080&quot;      
    user: root
    privileged: true
    logging:
      driver: &quot;json-file&quot;
      options:
        max-size: &quot;100m&quot;
        max-file: &quot;3&quot; 
 
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">version</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&#39;3.8&#39;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">services</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">app</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">image</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">registry.cn-beijing.aliyuncs.com/dfzh/staticforcecalibration-blazorserver:arm64</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">restart</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">always</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">volumes</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">/home/bjgrst/staticforcecalibration_data:/app/App_Data</span><span style="color: #D4D4D4">     </span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">/home/bjgrst/DefaultSeedsJsonFiles/:/app/DefaultSeedsJsonFiles</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">/dev:/dev</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">ports</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      - </span><span style="color: #CE9178">&quot;8080:8080&quot;</span><span style="color: #D4D4D4">      </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">user</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">root</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">privileged</span><span style="color: #D4D4D4">: </span><span style="color: #569CD6">true</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">logging</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">driver</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;json-file&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">      </span><span style="color: #569CD6">options</span><span style="color: #D4D4D4">:</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">max-size</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;100m&quot;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #569CD6">max-file</span><span style="color: #D4D4D4">: </span><span style="color: #CE9178">&quot;3&quot;</span><span style="color: #D4D4D4"> </span></span>
<span class="line"><span style="color: #D4D4D4"> </span></span>
<span class="line"></span></code></pre></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>linux系统中的docker经由路由器中的Clash科学上网</title>
		<link>https://blog.mutadecheng.com/2025/09/11/linux%e7%b3%bb%e7%bb%9f%e4%b8%ad%e7%9a%84docker%e7%bb%8f%e7%94%b1%e8%b7%af%e7%94%b1%e5%99%a8%e4%b8%ad%e7%9a%84clash%e7%a7%91%e5%ad%a6%e4%b8%8a%e7%bd%91/</link>
		
		<dc:creator><![CDATA[木它]]></dc:creator>
		<pubDate>Thu, 11 Sep 2025 07:01:49 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">https://blog.mutadecheng.com/?p=359</guid>

					<description><![CDATA[在linux中使用: 启用路由器的代理 , 通常是 密码(代理认证信息)一般可在界面中获取,如 将上述组合起来 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">在linux中使用:</h2>



<p>启用路由器的代理 , 通常是</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="http://192.168.9.1:7890" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">http://192.168.9.1:7890</span></span></code></pre></div>



<p>密码(代理认证信息)一般可在界面中获取,如  </p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="Clash:nSik86ew" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">Clash:nSik86ew</span></span></code></pre></div>



<p>将上述组合起来就可以在linux中访问</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="curl -v -x http://Clash:nSik86ew@192.168.9.1:7890 https://www.google.com

# 若是没有密码直接就是
curl -v -x http://192.168.9.1:7890 https://www.google.com
curl -v -x http://192.168.9.124:7890 https://www.google.com" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">curl</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-x</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">http://Clash:nSik86ew@192.168.9.1:7890</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">https://www.google.com</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 若是没有密码直接就是</span></span>
<span class="line"><span style="color: #DCDCAA">curl</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-x</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">http://192.168.9.1:7890</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">https://www.google.com</span></span>
<span class="line"><span style="color: #DCDCAA">curl</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-x</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">http://192.168.9.124:7890</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">https://www.google.com</span></span></code></pre></div>



<h3 class="wp-block-heading">临时设置带认证的环境变量</h3>



<p>在你的 Linux 终端里，使用如下命令（注意用户名和密码大小写）：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="export http_proxy=&quot;http://Clash:nSik86ew@192.168.9.1:7890&quot;
export https_proxy=&quot;http://Clash:nSik86ew@192.168.9.1:7890&quot;
export all_proxy=&quot;http://Clash:nSik86ew@192.168.9.1:7890&quot;

export http_proxy=&quot;http://192.168.9.124:7890&quot;
export https_proxy=&quot;http://192.168.9.124:7890&quot;
export all_proxy=&quot;http://192.168.9.124:7890&quot;
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">export</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">http_proxy</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;http://Clash:nSik86ew@192.168.9.1:7890&quot;</span></span>
<span class="line"><span style="color: #569CD6">export</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">https_proxy</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;http://Clash:nSik86ew@192.168.9.1:7890&quot;</span></span>
<span class="line"><span style="color: #569CD6">export</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">all_proxy</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;http://Clash:nSik86ew@192.168.9.1:7890&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">export</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">http_proxy</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;http://192.168.9.124:7890&quot;</span></span>
<span class="line"><span style="color: #569CD6">export</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">https_proxy</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;http://192.168.9.124:7890&quot;</span></span>
<span class="line"><span style="color: #569CD6">export</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">all_proxy</span><span style="color: #D4D4D4">=</span><span style="color: #CE9178">&quot;http://192.168.9.124:7890&quot;</span></span>
<span class="line"></span></code></pre></div>



<p>这样，终端里大部分支持代理的命令（如 curl、wget、pip、apt 等）都会走代理，并自动携带认证信息。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="# 临时取消代理环境变量
unset http_proxy
unset https_proxy
unset all_proxy" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955"># 临时取消代理环境变量</span></span>
<span class="line"><span style="color: #DCDCAA">unset</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">http_proxy</span></span>
<span class="line"><span style="color: #DCDCAA">unset</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">https_proxy</span></span>
<span class="line"><span style="color: #DCDCAA">unset</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">all_proxy</span></span></code></pre></div>



<h3 class="wp-block-heading">永久设置</h3>



<p>将上面三行加到你的&nbsp;<code>~/.bashrc</code>&nbsp;或&nbsp;<code>~/.zshrc</code>&nbsp;文件末尾，然后执行&nbsp;<code>source ~/.bashrc</code>&nbsp;或重启终端即可。</p>



<h2 class="wp-block-heading">验证</h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="# 直接访问
curl -v  https://www.google.com

# 查询外网Ip
curl ifconfig.me
curl ipinfo.io/ip

systemctl show --property=Environment docker" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955"># 直接访问</span></span>
<span class="line"><span style="color: #DCDCAA">curl</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4">  </span><span style="color: #CE9178">https://www.google.com</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A9955"># 查询外网Ip</span></span>
<span class="line"><span style="color: #DCDCAA">curl</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">ifconfig.me</span></span>
<span class="line"><span style="color: #DCDCAA">curl</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">ipinfo.io/ip</span></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">systemctl</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">show</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--property=Environment</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">docker</span></span></code></pre></div>



<h2 class="wp-block-heading">在linux中的Docker中使用: </h2>



<p>Docker daemon 默认<strong>不会读取 shell 的&nbsp;<code>http_proxy</code>&nbsp;环境变量</strong>。<br>需要专门配置 Docker 的代理。</p>



<p><strong>直接用 shell 的 <code>http_proxy</code>/<code>https_proxy</code> 环境变量对 <code>docker pull</code> 是</strong>无效的**，因为：</p>



<ul class="wp-block-list">
<li><code>docker pull</code> 实际上是由 <strong>Docker daemon（后台服务）</strong> 发起的网络请求，而不是你的 shell 进程。</li>



<li>Docker daemon 不会自动继承你 shell 里的环境变量。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">正确让 <code>docker pull</code> 走 HTTP 代理的方法</h2>



<h3 class="wp-block-heading">1. 配置 Docker daemon 的代理（推荐）</h3>



<h4 class="wp-block-heading">假设你的代理信息如下：</h4>



<ul class="wp-block-list">
<li>代理服务器：192.168.9.1</li>



<li>端口：7890</li>



<li>用户名：Clash</li>



<li>密码：nSik86ew</li>
</ul>



<h4 class="wp-block-heading">步骤如下：</h4>



<ol class="wp-block-list">
<li><strong>新建配置目录</strong></li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="   sudo mkdir -p /etc/systemd/system/docker.service.d" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">sudo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">mkdir</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/etc/systemd/system/docker.service.d</span></span></code></pre></div>



<ol start="2" class="wp-block-list">
<li><strong>新建代理配置文件</strong></li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="sudo bash -c 'cat &gt; /etc/systemd/system/docker.service.d/http-proxy.conf &lt;&lt;EOF
[Service]
Environment=&quot;HTTP_PROXY=http://Clash:nSik86ew@192.168.9.1:7890/&quot;
Environment=&quot;HTTPS_PROXY=http://Clash:nSik86ew@192.168.9.1:7890/&quot;
EOF'


sudo bash -c 'cat &gt; /etc/systemd/system/docker.service.d/http-proxy.conf &lt;&lt;EOF
[Service]
Environment=&quot;HTTP_PROXY=http://192.168.9.124:7890/&quot;
Environment=&quot;HTTPS_PROXY=http://192.168.9.124:7890/&quot;
EOF'" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">sudo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">bash</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-c</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;cat &gt; /etc/systemd/system/docker.service.d/http-proxy.conf &lt;&lt;EOF</span></span>
<span class="line"><span style="color: #CE9178">[Service]</span></span>
<span class="line"><span style="color: #CE9178">Environment=&quot;HTTP_PROXY=http://Clash:nSik86ew@192.168.9.1:7890/&quot;</span></span>
<span class="line"><span style="color: #CE9178">Environment=&quot;HTTPS_PROXY=http://Clash:nSik86ew@192.168.9.1:7890/&quot;</span></span>
<span class="line"><span style="color: #CE9178">EOF&#39;</span></span>
<span class="line"></span>
<span class="line"></span>
<span class="line"><span style="color: #DCDCAA">sudo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">bash</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-c</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;cat &gt; /etc/systemd/system/docker.service.d/http-proxy.conf &lt;&lt;EOF</span></span>
<span class="line"><span style="color: #CE9178">[Service]</span></span>
<span class="line"><span style="color: #CE9178">Environment=&quot;HTTP_PROXY=http://192.168.9.124:7890/&quot;</span></span>
<span class="line"><span style="color: #CE9178">Environment=&quot;HTTPS_PROXY=http://192.168.9.124:7890/&quot;</span></span>
<span class="line"><span style="color: #CE9178">EOF&#39;</span></span></code></pre></div>



<ol start="3" class="wp-block-list">
<li><strong>重载 systemd 并重启 Docker</strong></li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="   sudo systemctl daemon-reload
   sudo systemctl restart docker" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">sudo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">systemctl</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">daemon-reload</span></span>
<span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">sudo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">systemctl</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">restart</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">docker</span></span></code></pre></div>



<ol start="4" class="wp-block-list">
<li><strong>验证代理配置</strong></li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="   docker info | grep -i proxy" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">info</span><span style="color: #D4D4D4"> | </span><span style="color: #DCDCAA">grep</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-i</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">proxy</span></span></code></pre></div>



<p>应该能看到你刚刚设置的代理地址。</p>



<ol start="5" class="wp-block-list">
<li><strong>重新拉取镜像</strong></li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="   docker pull questdb/questdb:nightly-rhel" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">pull</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">questdb/questdb:nightly-rhel</span></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">其他说明</h2>



<ul class="wp-block-list">
<li>如果代理用户名或密码有特殊字符（如 <code>@</code>、<code>:</code>），需要进行<a href="https://www.urlencoder.org/">URL编码</a>。</li>



<li>如果你在用 root 用户，操作方法一样。</li>



<li>如果你有多个 Docker 配置文件（比如 <code>/etc/docker/daemon.json</code>），也可以在里面设置 <code>"proxies"</code> 字段，但推荐 systemd 方式，兼容性更好。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">总结</h2>



<p><strong>docker pull 不能直接用 shell 的 http_proxy 环境变量，必须为 Docker daemon 配置代理。</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker 镜像之 Netdata 实时性能监控和故障排除工具</title>
		<link>https://blog.mutadecheng.com/2025/05/28/docker-%e9%95%9c%e5%83%8f%e4%b9%8b-netdata-%e5%ae%9e%e6%97%b6%e6%80%a7%e8%83%bd%e7%9b%91%e6%8e%a7%e5%92%8c%e6%95%85%e9%9a%9c%e6%8e%92%e9%99%a4%e5%b7%a5%e5%85%b7/</link>
		
		<dc:creator><![CDATA[木它]]></dc:creator>
		<pubDate>Wed, 28 May 2025 09:35:07 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://blog.mutadecheng.com/?p=329</guid>

					<description><![CDATA[Netdata 是一个开源的实时监控工具，专门用于监控系统性能和健康状态。它能够提供详细的、实时的系统指标和图 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Netdata 是一个开源的实时监控工具，专门用于监控系统性能和健康状态。它能够提供详细的、实时的系统指标和图表，帮助用户快速识别和解决性能问题。Netdata 支持自动化的指标收集、报警和可视化，适用于多种系统和应用程序。</p>



<h3 class="wp-block-heading">Netdata 的特点</h3>



<ol class="wp-block-list">
<li><strong>实时监控</strong>：提供每秒级别的监控数据，帮助快速发现问题。</li>



<li><strong>轻量级</strong>：设计上注重资源消耗的最小化，不会对被监控的系统造成显著负担。</li>



<li><strong>全面的指标收集</strong>：支持多种硬件、操作系统和应用程序的指标，包括 CPU 使用率、内存利用率、磁盘 I/O、网络带宽等等。</li>



<li><strong>直观的可视化界面</strong>：通过 Web 界面展示数据，用户可以通过浏览器随时查看系统状态。</li>



<li><strong>可扩展性</strong>：支持插件机制，用户可以根据需要扩展监控的指标和功能。</li>



<li><strong>报警功能</strong>：支持设置报警规则，当系统指标超出设定阈值时，可以触发报警通知。</li>
</ol>



<h3 class="wp-block-heading">使用 Docker 安装 Netdata</h3>



<p>在 Docker 环境中安装 Netdata 非常方便，以下是具体步骤：</p>



<ol class="wp-block-list">
<li><strong>拉取 Netdata Docker 镜像</strong> 首先，通过 Docker Hub 拉取最新的 Netdata 镜像：</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="   docker pull netdata/netdata" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">pull</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">netdata/netdata</span></span></code></pre></div>



<ol start="2" class="wp-block-list">
<li><strong>运行 Netdata 容器</strong> 使用以下命令启动一个 Netdata 容器：</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="   docker run -d --name=netdata \
     -p 19999:19999 \
     -v netdataconfig:/etc/netdata \
     -v netdatalib:/var/lib/netdata \
     -v netdatacache:/var/cache/netdata \
     -v /etc/passwd:/host/etc/passwd:ro \
     -v /etc/group:/host/etc/group:ro \
     -v /proc:/host/proc:ro \
     -v /sys:/host/sys:ro \
     -v /etc/os-release:/host/etc/os-release:ro \
     --cap-add SYS_PTRACE \
     --security-opt apparmor=unconfined \
     --restart unless-stopped \
     netdata/netdata" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-d</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--name=netdata</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">-p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">19999</span><span style="color: #CE9178">:19999</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">netdataconfig:/etc/netdata</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">netdatalib:/var/lib/netdata</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">netdatacache:/var/cache/netdata</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/etc/passwd:/host/etc/passwd:ro</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/etc/group:/host/etc/group:ro</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/proc:/host/proc:ro</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/sys:/host/sys:ro</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">-v</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/etc/os-release:/host/etc/os-release:ro</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">--cap-add</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">SYS_PTRACE</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">--security-opt</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">apparmor=unconfined</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #569CD6">--restart</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">unless-stopped</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #CE9178">netdata/netdata</span></span></code></pre></div>



<ul class="wp-block-list">
<li><code>-d</code>：后台运行容器。</li>



<li><code>--name=netdata</code>：指定容器名称为 <code>netdata</code>。</li>



<li><code>-p 19999:19999</code>：将容器的 19999 端口映射到主机的 19999 端口，这个端口是 Netdata Web 界面的默认访问端口。</li>



<li><code>-v</code>：多个挂载卷，用于持久化配置和数据。</li>



<li><code>--cap-add</code> 和 <code>--security-opt</code>：提供必要的权限和安全选项。</li>
</ul>



<ol class="wp-block-list">
<li><strong>访问 Netdata 界面</strong> 启动容器后，可以通过浏览器访问 <code>http://&lt;主机IP>:19999</code> 来查看 Netdata 的实时监控界面。</li>
</ol>



<h3 class="wp-block-heading">注意事项</h3>



<ul class="wp-block-list">
<li>确保主机的 19999 端口未被占用，以便正常访问 Netdata。</li>



<li>如果需要自定义配置，可以修改挂载卷中的配置文件。</li>



<li>定期检查和更新 Netdata 镜像，以获得最新的功能和修复。</li>
</ul>



<p>通过 Docker 部署 Netdata，能够快速实现对系统的全方位监控，适合用于开发、测试和生产环境。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker 镜像收集 &#8211; Websockify</title>
		<link>https://blog.mutadecheng.com/2025/03/23/docker-%e9%95%9c%e5%83%8f%e6%94%b6%e9%9b%86-websockify/</link>
		
		<dc:creator><![CDATA[木它]]></dc:creator>
		<pubDate>Sat, 22 Mar 2025 21:29:14 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://blog.mutadecheng.com/?p=313</guid>

					<description><![CDATA[Websockify 是一个开源工具，用于在 WebSockets 和 TCP 套接字之间进行代理。它的主要作 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Websockify 是一个开源工具，用于在 WebSockets 和 TCP 套接字之间进行代理。它的主要作用是在 Web 浏览器中使用 WebSockets 协议与现有的基于 TCP 的应用程序进行通信。Websockify 可以将 WebSockets 请求转换为普通的 TCP 套接字请求，从而使不支持 WebSockets 的服务器能够与 Web 浏览器进行交互。</p>



<p>这个工具通常用于远程桌面协议（如 VNC）的场景中，通过 Websockify，可以在浏览器中直接访问远程桌面，而不需要安装额外的插件或软件。Websockify 通过监听一个 WebSockets 端口，并将流量转发到指定的 TCP 端口来实现这一功能。</p>



<p>使用 Websockify 的典型场景包括：</p>



<ol class="wp-block-list">
<li><strong>远程桌面访问</strong>：通过 Web 浏览器访问 VNC 服务器。</li>



<li><strong>应用程序代理</strong>：在浏览器中使用 WebSockets 与其他 TCP 服务进行通信。</li>



<li><strong>开发和测试</strong>：在开发 WebSocket 应用程序时，用于测试与传统 TCP 服务的交互。</li>
</ol>



<p>Websockify 提供了一个灵活的方式来桥接 WebSockets 和传统的网络服务，广泛用于需要在浏览器中实现实时通信的项目中。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// websockify 

docker run -it --rm -p 7000:80 novnc/websockify 80 10.1.1.1:5902" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// websockify </span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">docker</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">run</span><span style="color: #D4D4D4"> -</span><span style="color: #9CDCFE">it</span><span style="color: #D4D4D4"> --</span><span style="color: #9CDCFE">rm</span><span style="color: #D4D4D4"> -</span><span style="color: #9CDCFE">p</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">7000</span><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">80</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">novnc</span><span style="color: #D4D4D4">/</span><span style="color: #9CDCFE">websockify</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">80</span><span style="color: #D4D4D4"> </span><span style="color: #F44747">10.1.1.1</span><span style="color: #D4D4D4">:</span><span style="color: #B5CEA8">5902</span></span></code></pre></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Docker选项以及Shell环境变量用于配置容器的行为和环境</title>
		<link>https://blog.mutadecheng.com/2025/03/07/docker%e9%80%89%e9%a1%b9%e4%bb%a5%e5%8f%8ashell%e7%8e%af%e5%a2%83%e5%8f%98%e9%87%8f%e7%94%a8%e4%ba%8e%e9%85%8d%e7%bd%ae%e5%ae%b9%e5%99%a8%e7%9a%84%e8%a1%8c%e4%b8%ba%e5%92%8c%e7%8e%af%e5%a2%83/</link>
		
		<dc:creator><![CDATA[木它]]></dc:creator>
		<pubDate>Fri, 07 Mar 2025 08:52:39 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<guid isPermaLink="false">https://blog.mutadecheng.com/?p=291</guid>

					<description><![CDATA[在Docker中，运行容器时可以使用许多选项来配置容器的行为和环境。以下是一些常用的选项及其详细解释： 常用D [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>在Docker中，运行容器时可以使用许多选项来配置容器的行为和环境。以下是一些常用的选项及其详细解释：</p>



<h3 class="wp-block-heading">常用Docker选项</h3>



<ol class="wp-block-list">
<li><strong><code>--name</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>用于为容器指定一个名称，便于后续管理和识别。</li>



<li>例如：<code>--name my_container</code></li>
</ul>



<ol class="wp-block-list">
<li><strong><code>--detach</code> 或 <code>-d</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>以后台模式运行容器。</li>



<li>例如：<code>--detach</code></li>
</ul>



<ol class="wp-block-list">
<li><strong><code>--publish</code> 或 <code>-p</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>将主机的端口映射到容器的端口，以便通过主机访问容器内的服务。</li>



<li>格式为<code>主机端口:容器端口</code>。</li>



<li>例如：<code>--publish 8080:80</code></li>
</ul>



<ol class="wp-block-list">
<li><strong><code>--env</code> 或 <code>-e</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>设置容器内的环境变量。</li>



<li>例如：<code>--env MY_VAR=value</code></li>
</ul>



<ol class="wp-block-list">
<li><strong><code>--volume</code> 或 <code>-v</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>将主机上的目录或文件挂载到容器内。</li>



<li>格式为<code>主机路径:容器路径</code>。</li>



<li>例如：<code>--volume /host/data:/container/data</code></li>
</ul>



<ol class="wp-block-list">
<li><strong><code>--restart</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>设置容器的重启策略。</li>



<li>常用值包括<code>no</code>（从不重启）、<code>always</code>（总是重启）、<code>unless-stopped</code>（除非手动停止，否则总是重启）、<code>on-failure</code>（在失败时重启）。</li>



<li>例如：<code>--restart always</code></li>
</ul>



<ol class="wp-block-list">
<li><strong><code>--hostname</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>为容器设置一个主机名。</li>



<li>例如：<code>--hostname myhostname</code></li>
</ul>



<ol class="wp-block-list">
<li><strong><code>--network</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>连接容器到指定的网络。</li>



<li>例如：<code>--network my_network</code></li>
</ul>



<ol class="wp-block-list">
<li><strong><code>--user</code> 或 <code>-u</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>指定容器内运行进程的用户。</li>



<li>例如：<code>--user 1001</code> 或者 <code>--user username</code></li>
</ul>



<ol class="wp-block-list">
<li><strong><code>--cpus</code></strong>
<ul class="wp-block-list">
<li>限制容器使用的CPU数量。</li>



<li>例如：<code>--cpus="1.5"</code>（允许使用1.5个CPU）</li>
</ul>
</li>



<li><strong><code>--memory</code> 或 <code>-m</code></strong>
<ul class="wp-block-list">
<li>限制容器使用的内存量。</li>



<li>例如：<code>--memory="512m"</code>（限制为512MB）</li>
</ul>
</li>



<li><strong><code>--entrypoint</code></strong>
<ul class="wp-block-list">
<li>覆盖镜像中的默认入口点。</li>



<li>例如：<code>--entrypoint /bin/bash</code></li>
</ul>
</li>



<li><strong><code>--workdir</code> 或 <code>-w</code></strong>
<ul class="wp-block-list">
<li>设置容器内的工作目录。</li>



<li>例如：<code>--workdir /app</code></li>
</ul>
</li>



<li><strong><code>--link</code></strong>
<ul class="wp-block-list">
<li>连接到其他容器。</li>



<li>这种方法已被Docker网络功能所取代。</li>



<li>例如：<code>--link other_container_name:alias</code></li>
</ul>
</li>



<li><strong><code>--cap-add</code> 和 <code>--cap-drop</code></strong>
<ul class="wp-block-list">
<li>添加或移除Linux内核功能。</li>



<li>例如：<code>--cap-add NET_ADMIN</code></li>
</ul>
</li>



<li><strong><code>--log-driver</code></strong>
<ul class="wp-block-list">
<li>指定容器的日志驱动。</li>



<li>例如：<code>--log-driver json-file</code></li>
</ul>
</li>
</ol>



<h3 class="wp-block-heading">Docker命令中，使用环境变量可以动态地传递信息。以下是一些常用的Shell环境变量和它们的用途：</h3>



<h3 class="wp-block-heading">常用Shell环境变量</h3>



<ol class="wp-block-list">
<li><strong><code>$PWD</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>表示当前工作目录（Present Working Directory）的路径。</li>



<li>在Docker命令中使用时，可以将当前目录挂载到容器中。</li>
</ul>



<ol class="wp-block-list">
<li><strong><code>$UID</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>当前用户的用户ID（User ID）。</li>



<li>在Docker中使用这个变量可以确保容器内创建的文件与主机上的用户权限一致。</li>
</ul>



<ol class="wp-block-list">
<li><strong><code>$USER</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>当前登录用户的用户名。</li>



<li>可以用于设置容器内的环境变量或文件权限。</li>
</ul>



<ol class="wp-block-list">
<li><strong><code>$HOME</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>当前用户的主目录路径。</li>



<li>常用于指定配置文件或数据文件的默认路径。</li>
</ul>



<ol class="wp-block-list">
<li><strong><code>$PATH</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>系统可执行文件的搜索路径。</li>



<li>在Docker中设置这个变量可以影响容器内命令的查找路径。</li>
</ul>



<ol class="wp-block-list">
<li><strong><code>$SHELL</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>当前用户的默认Shell路径。</li>



<li>可用于指定容器中使用的Shell。</li>
</ul>



<ol class="wp-block-list">
<li><strong><code>$HOSTNAME</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>当前主机的名称。</li>



<li>在Docker中可以用于设置或获取容器的主机名。</li>
</ul>



<ol class="wp-block-list">
<li><strong><code>$HOME</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>用户主目录路径。</li>



<li>常用于指定用户的默认存储路径。</li>
</ul>



<ol class="wp-block-list">
<li><strong><code>$LANG</code> 和 <code>$LANGUAGE</code></strong></li>
</ol>



<ul class="wp-block-list">
<li>系统语言和区域设置。</li>



<li>在Docker中可以用来设置容器的语言环境。</li>
</ul>



<ol class="wp-block-list">
<li><strong><code>$RANDOM</code></strong>
<ul class="wp-block-list">
<li>生成一个随机数。</li>



<li>可以用于简单的随机值生成，例如临时文件名。</li>
</ul>
</li>
</ol>



<h3 class="wp-block-heading">在Docker中使用环境变量</h3>



<p>在Docker命令中，可以使用<code>--env</code>或<code>-e</code>选项来传递这些环境变量。例如：</p>



<pre class="wp-block-code"><code>docker run --env MY_VAR=$USER my_image</code></pre>



<ul class="wp-block-list">
<li>这条命令将当前用户的用户名传递给容器中的<code>MY_VAR</code>变量。</li>
</ul>



<h3 class="wp-block-heading">结合使用环境变量和Docker选项</h3>



<p>结合使用这些Shell环境变量可以使Docker命令更加动态和灵活。例如：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker run --detach --name my_container \
  --publish 8080:80 \
  --env USER_ID=$UID \
  --volume $PWD:/app \
  my_image" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--detach</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--name</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">my_container</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--publish</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">8080</span><span style="color: #CE9178">:80</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--env</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">USER_ID=</span><span style="color: #9CDCFE">$UID</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--volume</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">$PWD</span><span style="color: #CE9178">:/app</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #CE9178">my_image</span></span></code></pre></div>



<ul class="wp-block-list">
<li><strong><code>--env USER_ID=$UID</code></strong>：将主机的用户ID传递给容器，这样可以在容器内使用与主机一致的用户权限。</li>



<li><strong><code>--volume $PWD:/app</code></strong>：将当前工作目录挂载到容器内的<code>/app</code>目录，便于在容器中访问或修改主机上的文件。</li>
</ul>



<p>通过结合使用Shell环境变量和Docker选项，可以实现更灵活的容器配置，特别是在需要共享主机资源或保持用户权限一致性时。了解这些变量的作用有助于在不同环境中更高效地使用Docker。</p>



<p> </p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ubuntu 查看 Docker 容器运行日志存储空间占用</title>
		<link>https://blog.mutadecheng.com/2025/02/10/ubuntu-%e6%9f%a5%e7%9c%8b-docker-%e5%ae%b9%e5%99%a8%e8%bf%90%e8%a1%8c%e6%97%a5%e5%bf%97%e5%ad%98%e5%82%a8%e7%a9%ba%e9%97%b4%e5%8d%a0%e7%94%a8/</link>
		
		<dc:creator><![CDATA[木它]]></dc:creator>
		<pubDate>Mon, 10 Feb 2025 06:56:31 +0000</pubDate>
				<category><![CDATA[Docker]]></category>
		<category><![CDATA[linux]]></category>
		<guid isPermaLink="false">https://blog.mutadecheng.com/?p=284</guid>

					<description><![CDATA[结果如下 要找出哪个容器与特定的日志文件相关联: 可以使用容器的 ID 来识别它。找到日志文件的路径，其中包含 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="// 先提升权限, 才能进行下一步
sudo su
// 查找日志文件, 并且倒序
find /var/lib/docker/containers  -name &quot;*.log&quot; | xargs du -h | sort -hr" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #6A9955">// 先提升权限, 才能进行下一步</span></span>
<span class="line"><span style="color: #9CDCFE">sudo</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">su</span></span>
<span class="line"><span style="color: #6A9955">// 查找日志文件, 并且倒序</span></span>
<span class="line"><span style="color: #9CDCFE">find</span><span style="color: #D4D4D4"> /</span><span style="color: #9CDCFE">var</span><span style="color: #D4D4D4">/</span><span style="color: #9CDCFE">lib</span><span style="color: #D4D4D4">/</span><span style="color: #9CDCFE">docker</span><span style="color: #D4D4D4">/</span><span style="color: #9CDCFE">containers</span><span style="color: #D4D4D4">  -</span><span style="color: #9CDCFE">name</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;*.log&quot;</span><span style="color: #D4D4D4"> | </span><span style="color: #9CDCFE">xargs</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">du</span><span style="color: #D4D4D4"> -</span><span style="color: #9CDCFE">h</span><span style="color: #D4D4D4"> | </span><span style="color: #9CDCFE">sort</span><span style="color: #D4D4D4"> -</span><span style="color: #9CDCFE">hr</span></span></code></pre></div>



<p>结果如下</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="24G	/var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log
12G	/var/lib/docker/containers/776e2068a08b8da92b410ee433d0758ae4484ae29183d3063f187b8ca7f00090/776e2068a08b8da92b410ee433d0758ae4484ae29183d3063f187b8ca7f00090-json.log
6.2G	/var/lib/docker/containers/d4f7ef527d345fec8f180adb2937b81a7965767ee38c88d89f7884e53dc5c139/d4f7ef527d345fec8f180adb2937b81a7965767ee38c88d89f7884e53dc5c139-json.log
6.2G	/var/lib/docker/containers/8fec9ee7a0f1934c2e70fbafa8fddbc8baa471bdde77991b72b588f09b523fa3/8fec9ee7a0f1934c2e70fbafa8fddbc8baa471bdde77991b72b588f09b523fa3-json.log
" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">24G</span><span style="color: #D4D4D4">	</span><span style="color: #CE9178">/var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log</span></span>
<span class="line"><span style="color: #DCDCAA">12G</span><span style="color: #D4D4D4">	</span><span style="color: #CE9178">/var/lib/docker/containers/776e2068a08b8da92b410ee433d0758ae4484ae29183d3063f187b8ca7f00090/776e2068a08b8da92b410ee433d0758ae4484ae29183d3063f187b8ca7f00090-json.log</span></span>
<span class="line"><span style="color: #DCDCAA">6.2G</span><span style="color: #D4D4D4">	</span><span style="color: #CE9178">/var/lib/docker/containers/d4f7ef527d345fec8f180adb2937b81a7965767ee38c88d89f7884e53dc5c139/d4f7ef527d345fec8f180adb2937b81a7965767ee38c88d89f7884e53dc5c139-json.log</span></span>
<span class="line"><span style="color: #DCDCAA">6.2G</span><span style="color: #D4D4D4">	</span><span style="color: #CE9178">/var/lib/docker/containers/8fec9ee7a0f1934c2e70fbafa8fddbc8baa471bdde77991b72b588f09b523fa3/8fec9ee7a0f1934c2e70fbafa8fddbc8baa471bdde77991b72b588f09b523fa3-json.log</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading">要找出哪个容器与特定的日志文件相关联:</h2>



<p>可以使用容器的 ID 来识别它。找到日志文件的路径，其中包含了容器的 ID。以下是如何通过容器 ID 找到对应容器的详细信息的步骤：</p>



<ol class="wp-block-list">
<li><strong>获取容器 ID</strong>：<br>在日志文件路径中找到容器 ID，例如 <code>1a3ef14d342c</code>。</li>



<li><strong>查看容器详细信息</strong>：<br>使用 <code>docker ps -a</code> 命令列出所有容器，包括正在运行和已停止的容器。然后，你可以通过容器 ID 来查找对应的容器名称和其他信息。</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="   docker ps -a --filter &quot;id=1a3ef14d342c&quot;" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">ps</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-a</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--filter</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;id=1a3ef14d342c&quot;</span></span></code></pre></div>



<p>这将显示与该 ID 匹配的容器的信息，包括容器名称、状态、创建时间等。</p>



<ol start="3" class="wp-block-list">
<li><strong>查看容器详细信息（可选）</strong>：<br>如果需要更多详细信息，可以使用 <code>docker inspect</code> 命令：</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="   docker inspect 1a3ef14d342c" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">inspect</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">1</span><span style="color: #CE9178">a3ef14d342c</span></span></code></pre></div>



<p>这将返回一个 JSON 格式的详细信息列表，其中包括容器的配置、网络设置、挂载卷等信息。 </p>



<h2 class="wp-block-heading">如果想清空某个特定的日志文件，可以使用以下方法之一：</h2>



<p>假设要清空的日志文件路径是 <code>/var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log</code>，</p>



<h3 class="wp-block-heading">方法一：使用 <code>truncate</code> 命令</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="truncate -s 0 /var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">truncate</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-s</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log</span></span></code></pre></div>



<h3 class="wp-block-heading">方法二：使用 <code>echo</code> 重定向</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="echo &quot;&quot; &gt; /var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">echo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;&quot;</span><span style="color: #D4D4D4"> &gt; </span><span style="color: #CE9178">/var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log</span></span></code></pre></div>



<h3 class="wp-block-heading">方法三：使用 <code>: &gt;</code> 操作符</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code=": &gt; /var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">:</span><span style="color: #D4D4D4"> &gt; </span><span style="color: #CE9178">/var/lib/docker/containers/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d/4b6f6e2d86f2fd6955ffa569337c0c26378deb30de6878368ddd050965658d9d-json.log</span></span></code></pre></div>



<p>这三种方法都会将指定的日志文件清空，而不会删除文件本身。</p>



<h2 class="wp-block-heading">如何防止 Docker 容器的日志文件过大</h2>



<p>要防止 Docker 容器的日志文件过大，可以通过配置 Docker 的日志轮替（log rotation）功能来限制日志文件的大小和数量。这可以通过修改 Docker 的配置文件 <code>daemon.json</code> 来实现。以下是具体的步骤：</p>



<h3 class="wp-block-heading">配置日志轮替</h3>



<ol class="wp-block-list">
<li><strong>编辑 Docker 配置文件</strong> Docker 的配置文件通常位于 <code>/etc/docker/daemon.json</code>。如果该文件不存在，可以创建一个新的。 使用文本编辑器打开或创建文件：</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="   sudo nano /etc/docker/daemon.json" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">sudo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">nano</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">/etc/docker/daemon.json</span></span></code></pre></div>



<ol start="2" class="wp-block-list">
<li><strong>添加或修改日志配置</strong> 在 <code>daemon.json</code> 文件中，添加以下配置以启用日志轮替：</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="   {
     &quot;log-driver&quot;: &quot;json-file&quot;,
     &quot;log-opts&quot;: {
       &quot;max-size&quot;: &quot;10m&quot;,   // 每个日志文件的最大尺寸，例如 10MB
       &quot;max-file&quot;: &quot;3&quot;      // 保留的最大日志文件数量
     }
   }" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">   {</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #DCDCAA">&quot;log-driver&quot;</span><span style="color: #DCDCAA">:</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;json-file&quot;,</span></span>
<span class="line"><span style="color: #D4D4D4">     </span><span style="color: #DCDCAA">&quot;log-opts&quot;</span><span style="color: #DCDCAA">:</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">{</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #DCDCAA">&quot;max-size&quot;</span><span style="color: #DCDCAA">:</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;10m&quot;,</span><span style="color: #D4D4D4">   </span><span style="color: #CE9178">//</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">每个日志文件的最大尺寸，例如</span><span style="color: #D4D4D4"> </span><span style="color: #B5CEA8">10</span><span style="color: #CE9178">MB</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #DCDCAA">&quot;max-file&quot;</span><span style="color: #DCDCAA">:</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&quot;3&quot;</span><span style="color: #D4D4D4">      </span><span style="color: #CE9178">//</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">保留的最大日志文件数量</span></span>
<span class="line"><span style="color: #D4D4D4">     }</span></span>
<span class="line"><span style="color: #D4D4D4">   }</span></span></code></pre></div>



<p>这段配置的意思是每个日志文件最大为 10MB，每个容器最多保留 3 个日志文件。</p>



<ol start="3" class="wp-block-list">
<li><strong>重新启动 Docker 服务</strong> 修改配置文件后，需要重新启动 Docker 服务以应用更改：</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="   sudo systemctl restart docker" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">   </span><span style="color: #DCDCAA">sudo</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">systemctl</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">restart</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">docker</span></span></code></pre></div>



<h3 class="wp-block-heading">验证配置</h3>



<p>可以通过以下命令来验证 Docker 的日志配置是否生效：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker info --format '{{.LoggingDriver}}'" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">info</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">--format</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">&#39;{{.LoggingDriver}}&#39;</span></span></code></pre></div>



<p>这将显示当前使用的日志驱动程序。</p>



<h3 class="wp-block-heading">注意事项</h3>



<ul class="wp-block-list">
<li><strong>日志驱动</strong>：<code>json-file</code> 是 Docker 的默认日志驱动程序。如果使用其他日志驱动程序（如 <code>syslog</code>、<code>journald</code> 等），相应的配置可能会有所不同。</li>



<li><strong>影响</strong>：启用日志轮替后，旧日志会自动删除，因此可能会丢失旧日志信息。确保日志配置符合数据保留策略。</li>



<li><strong>其他日志驱动</strong>：如果环境中需要更复杂的日志管理方案，可以考虑使用其他日志驱动程序或外部日志管理工具来收集和分析日志。</li>
</ul>



<p>如果只想限制某个特定容器的日志大小，而不是全局设置，可以在启动容器时通过命令行选项来指定日志配置。以下是如何为单个容器设置日志大小限制的步骤：</p>



<p>假设要启动一个名为 <code>my-container</code> 的容器，并希望限制其日志文件大小为 10MB，最多保留 3 个日志文件：</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="docker run -d \
  --name my-container \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  your-image-name" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">docker</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">run</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">-d</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--name</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">my-container</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--log-driver</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">json-file</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--log-opt</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">max-size=</span><span style="color: #B5CEA8">10</span><span style="color: #CE9178">m</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #569CD6">--log-opt</span><span style="color: #D4D4D4"> </span><span style="color: #CE9178">max-file=</span><span style="color: #B5CEA8">3</span><span style="color: #D4D4D4"> </span><span style="color: #D7BA7D">\</span></span>
<span class="line"><span style="color: #D4D4D4">  </span><span style="color: #CE9178">your-image-name</span></span></code></pre></div>



<p>在这个命令中：</p>



<ul class="wp-block-list">
<li><code>--log-driver json-file</code>：指定使用 <code>json-file</code> 日志驱动。</li>



<li><code>--log-opt max-size=10m</code>：设置单个日志文件的最大大小为 10MB。</li>



<li><code>--log-opt max-file=3</code>：设置最多保留 3 个日志文件。</li>
</ul>



<p>这样，只有 <code>my-container</code> 这个容器会受到这些日志限制的影响，而其他容器将继续使用默认的日志配置。</p>



<p>如果已经有一个正在运行的容器，并希望更改其日志配置，你需要先<strong>停止并删除</strong>该容器，然后使用上述命令重新启动它。请注意，删除容器会导致其数据丢失，除非使用了数据卷来持久化数据。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
