<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>钟志胜的个人网站 - docker</title>
<link>https://zzs.tdcktz.com/index.php/tag/docker/</link>
<atom:link href="https://zzs.tdcktz.com/index.php/feed/tag/docker/" rel="self" type="application/rss+xml" />
<language>zh-CN</language>
<description></description>
<lastBuildDate>Sat, 07 Jun 2025 09:04:00 +0000</lastBuildDate>
<pubDate>Sat, 07 Jun 2025 09:04:00 +0000</pubDate>
<item>
<title>在Docker中部署Dify和Nocobase通过API访问时会遇到的一些坑</title>
<link>https://zzs.tdcktz.com/index.php/archives/110/</link>
<guid>https://zzs.tdcktz.com/index.php/archives/110/</guid>
<pubDate>Sat, 07 Jun 2025 09:04:00 +0000</pubDate>
<dc:creator>钟志胜</dc:creator>
<category><![CDATA[技术相关]]></category>
<description><![CDATA[在Docker中部署Dify和Nocobase时，API访问失败通常涉及网络、配置、权限等多方面的复杂问题。结合技术文档和实践案例，以下是最常见的十大核心坑点及解决方案：一、容器网络通信问题容器...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>在Docker中部署Dify和Nocobase时，API访问失败通常涉及网络、配置、权限等多方面的复杂问题。结合技术文档和实践案例，以下是最常见的十大核心坑点及解决方案：</p><p>一、容器网络通信问题</p><ol><li>容器间无法通过服务名访问</li></ol><ul><li>原因：Docker默认网络模式下，容器无法直接通过服务名通信。例如，Dify容器尝试访问Nocobase时使用 <a href="http://localhost:13000">http://localhost:13000</a> ，但localhost指向容器自身。</li><li>解决方案：</li><li><p>自定义网络：在 docker-compose.yml 中定义共享网络，例如：<br>networks:<br>nocobase-network:<br>  driver: bridge<br>services:<br>nocobase:<br>  networks:</p><pre><code>- nocobase-network</code></pre><p>dify:<br>  networks:</p><pre><code>- nocobase-network</code></pre><p> </p></li><li>使用服务名访问：Dify配置中API地址应设置为 <a href="http://nocobase:13000/api">http://nocobase:13000/api</a> ，其中 nocobase 是Docker Compose中Nocobase服务的名称。</li></ul><ol start="2"><li>端口映射错误</li></ol><ul><li>原因：Nocobase的API端口未正确暴露。例如，默认端口80未映射到宿主机的13000端口。</li><li>解决方案：</li><li><p>检查端口配置：在Docker Compose中确保端口映射正确：<br>ports:</p><ul><li>"13000:80"  # 宿主机端口:容器端口<br> </li></ul></li><li>验证端口连通性：使用 docker exec -it &lt;container_name&gt; curl <a href="http://localhost:80/api">http://localhost:80/api</a> 测试容器内API是否可达。</li></ul><p>二、环境变量与配置错误</p><ol><li>Nocobase未绑定0.0.0.0</li></ol><ul><li>原因：Nocobase默认绑定 127.0.0.1 ，导致其他容器无法访问。</li><li>解决方案：</li><li><p>设置HOST环境变量：在Docker Compose中添加：<br>environment:</p><ul><li>HOST=0.0.0.0<br> </li></ul></li></ul><ol start="2"><li>Dify未正确配置API地址</li></ol><ul><li>原因：Dify使用宿主机IP或localhost，而非容器服务名。</li><li>解决方案：</li><li>使用容器服务名：在Dify的插件配置中，API地址设置为 <a href="http://nocobase:13000/api">http://nocobase:13000/api</a> ，而非 <a href="http://127.0.0.1:13000/api">http://127.0.0.1:13000/api</a> 。</li></ul><p>三、跨域资源共享（CORS）问题</p><ol><li>Nocobase未配置CORS头</li></ol><ul><li>原因：浏览器阻止跨域请求，导致Dify无法访问Nocobase API。</li><li>解决方案：</li><li>Nocobase配置：在 .env 文件中添加：<br>CORS_ORIGIN=<a href="http://dify:3000">http://dify:3000</a><br>CORS_METHODS=GET,POST,PUT,DELETE<br>CORS_HEADERS=Content-Type,Authorization<br> </li><li>验证响应头：使用 curl -I <a href="http://nocobase:13000/api">http://nocobase:13000/api</a> 检查是否包含 Access-Control-Allow-Origin 等头。</li></ul><p>四、认证与权限问题</p><ol><li>API密钥或JWT缺失</li></ol><ul><li>原因：Nocobase的API需要身份验证，而Dify未携带有效凭证。</li><li>解决方案：</li><li>获取API密钥：在Nocobase管理后台生成API密钥，并在Dify的请求头中添加：<br>headers: {<br>'Authorization': 'Bearer YOUR_API_KEY'<br>}<br> </li><li>使用JWT认证：通过Nocobase的登录接口获取JWT，并存入Dify的请求头。</li></ul><ol start="2"><li>权限不足</li></ol><ul><li>原因：Nocobase的角色权限配置过严，导致Dify无法访问特定API端点。</li><li>解决方案：</li><li>检查角色权限：在Nocobase管理后台为API端点配置允许的角色。</li><li>使用Root用户测试：临时使用Root用户验证权限问题。</li></ul><p>五、Docker Compose配置问题</p><ol><li>服务依赖顺序错误</li></ol><ul><li>原因：Nocobase尚未启动，Dify就尝试连接。</li><li>解决方案：</li><li>添加依赖：在Dify服务中使用 depends_on 确保Nocobase先启动：<br>depends_on:<br>nocobase:<br>  condition: service_healthy<br> </li><li>健康检查：在Nocobase服务中添加健康检查：<br>healthcheck:<br>test: ["CMD-SHELL", "curl -f <a href="http://localhost:80/health">http://localhost:80/health</a> || exit 1"]<br>interval: 5s<br>timeout: 5s<br>retries: 5<br> </li></ul><ol start="2"><li>网络隔离</li></ol><ul><li>原因：Dify和Nocobase运行在不同的网络中。</li><li>解决方案：</li><li>共享网络：确保两个服务加入同一自定义网络。</li></ul><p>六、日志与错误排查</p><ol><li>未查看容器日志</li></ol><ul><li>原因：错误信息隐藏在容器日志中。</li><li>解决方案：</li><li>查看Nocobase日志：<br>docker logs nocobase<br> </li><li>查看Dify日志：<br>docker logs dify<br> </li><li>检查错误类型：重点关注 404 Not Found （路径错误）、 401 Unauthorized （认证失败）、 500 Internal Server Error （服务端错误）等。</li></ul><ol start="2"><li>未启用详细日志</li></ol><ul><li>原因：Nocobase默认日志级别过低，未记录关键信息。</li><li>解决方案：</li><li>设置日志级别：在 .env 文件中添加：<br>LOG_LEVEL=debug<br> </li></ul><p>七、防火墙与安全组限制</p><ol><li>云服务器安全组未开放端口</li></ol><ul><li>原因：Nocobase的API端口（如13000）未在云服务器安全组中开放。</li><li>解决方案：</li><li>配置安全组规则：允许来自Dify容器IP或0.0.0.0/0的TCP流量到13000端口。</li></ul><ol start="2"><li>Docker与防火墙冲突</li></ol><ul><li>原因：Docker默认创建的iptables规则被防火墙拦截。</li><li>解决方案：</li><li>关闭Docker的iptables自动创建：在 /etc/docker/daemon.json 中添加：<br>{<br>"iptables": false<br>}<br> </li><li>手动配置防火墙规则：使用 ufw 或 firewalld 开放端口。</li></ul><p>八、SSL/TLS配置问题</p><ol><li>混合内容错误</li></ol><ul><li>原因：Nocobase启用HTTPS，而Dify通过HTTP访问。</li><li>解决方案：</li><li>配置HTTPS：在Nocobase的 .env 文件中添加：<br>APP_URL=<a href="https://your-domain.com">https://your-domain.com</a><br>SSL_CERT_PATH=/path/to/cert.pem<br>SSL_KEY_PATH=/path/to/key.pem<br> </li><li>Dify使用HTTPS：在Dify的API地址中使用 <a href="https://nocobase:13000/api">https://nocobase:13000/api</a> 。</li></ul><ol start="2"><li>证书验证失败</li></ol><ul><li>原因：自签名证书未被信任。</li><li>解决方案：</li><li>添加信任：在Dify容器中安装证书，或在请求中关闭验证（仅用于开发环境）。</li></ul><p>九、版本兼容性问题</p><ol><li>API接口变更</li></ol><ul><li>原因：Dify和Nocobase版本不兼容，导致API端点或参数变化。</li><li>解决方案：</li><li>检查版本兼容性：参考官方文档确认Dify与Nocobase的兼容版本组合。</li><li>回退版本：暂时使用已知兼容的版本。</li></ul><ol start="2"><li>依赖库冲突</li></ol><ul><li>原因：Docker镜像中的依赖库版本不匹配。</li><li>解决方案：</li><li>使用固定版本镜像：在Docker Compose中指定具体版本，例如：<br>image: nocobase/nocobase:0.21.0<br> </li></ul><p>十、资源与性能问题</p><ol><li>内存不足</li></ol><ul><li>原因：容器因内存不足被kill。</li><li>解决方案：</li><li>增加内存限制：在Docker Compose中添加：<br>mem_limit: 2g<br> </li></ul><ol start="2"><li>CPU过载</li></ol><ul><li>原因：Nocobase处理请求时CPU占用过高。</li><li>解决方案：</li><li>优化查询：检查数据库查询是否高效，添加索引。</li><li>横向扩展：使用负载均衡器部署多个Nocobase实例。</li></ul><p>终极排查流程图</p><p>graph TD</p><pre><code>A[访问失败] --&gt; B{容器网络是否互通?}
B --&gt;|否| C[检查自定义网络配置]
B --&gt;|是| D{端口是否正确映射?}
D --&gt;|否| E[修正端口映射]
D --&gt;|是| F{API地址是否使用服务名?}
F --&gt;|否| G[改用服务名访问]
F --&gt;|是| H{CORS头是否正确?}
H --&gt;|否| I[配置Nocobase CORS]
H --&gt;|是| J{认证信息是否有效?}
J --&gt;|否| K[检查API密钥/JWT]
J --&gt;|是| L{日志是否有错误?}
L --&gt;|是| M[根据日志修复问题]
L --&gt;|否| N[检查版本兼容性]</code></pre><p> </p><p>总结</p><p>解决Dify访问Nocobase API的问题需要系统性排查，从网络配置到认证权限，再到日志分析。建议优先检查容器网络、端口映射和CORS配置，这些是最常见的问题根源。同时，利用Docker的日志功能和Nocobase的权限管理工具，可以快速定位和解决问题。如果遇到复杂情况，参考官方文档和社区案例（如）通常能找到解决方案。</p><p>在Docker部署Dify和Nocobase时，以下六大核心坑点几乎是必然会遇到的，每个坑点都有明确的技术根源和系统性解决方案：</p><p>一、容器网络通信黑洞</p><ol><li>服务名解析失效</li></ol><ul><li>原因：Docker默认网络模式下，容器无法通过服务名互相访问。例如，Dify容器使用 <a href="http://localhost:13000">http://localhost:13000</a> 访问Nocobase时，localhost指向容器自身。</li><li>解决方案：</li><li><p>强制使用自定义网络：在 docker-compose.yml 中定义共享网络：<br>networks:<br>nocobase-network:<br>  driver: bridge<br>services:<br>nocobase:<br>  networks:</p><pre><code>- nocobase-network</code></pre><p>dify:<br>  networks:</p><pre><code>- nocobase-network</code></pre><p> </p></li><li>服务名访问验证：在Dify容器内执行 ping nocobase ，若返回IP地址则表示网络连通。</li></ul><ol start="2"><li>跨宿主机通信障碍</li></ol><ul><li>原因：默认Bridge网络仅支持单主机通信，跨主机部署时需使用Overlay网络。</li><li>解决方案：</li><li>创建Overlay网络：<br>docker network create --driver overlay nocobase-overlay<br> </li><li>跨主机服务发现：通过Docker Swarm或Consul实现服务注册与发现。</li></ul><p>二、端口映射连环坑</p><ol><li>端口占用引发的血案</li></ol><ul><li>原因：宿主机端口被其他进程占用，例如Nocobase默认端口80被Nginx占用。</li><li>解决方案：</li><li>端口冲突检测：<br>netstat -tuln | grep 80<br> </li><li>动态端口分配：将Nocobase端口映射为 13000:80 ，Dify映射为 3000:3000 。</li></ul><ol start="2"><li>容器内端口未监听</li></ol><ul><li>原因：Nocobase未绑定0.0.0.0，仅监听127.0.0.1。</li><li>解决方案：</li><li><p>强制绑定所有地址：在Docker Compose中添加：<br>environment:</p><ul><li>HOST=0.0.0.0<br> </li></ul></li><li>容器内验证：<br>docker exec -it nocobase curl <a href="http://localhost:80">http://localhost:80</a><br> </li></ul><p>三、CORS地狱模式</p><ol><li>浏览器同源策略拦截</li></ol><ul><li>原因：Dify（前端）与Nocobase（后端）跨域请求被浏览器阻止。</li><li>解决方案：</li><li>Nocobase全局配置：在 .env 中添加：<br>CORS_ORIGIN=<a href="http://dify:3000">http://dify:3000</a><br>CORS_METHODS=GET,POST,PUT,DELETE<br>CORS_HEADERS=Content-Type,Authorization<br> </li><li>响应头验证：<br>curl -I <a href="http://nocobase:13000/api">http://nocobase:13000/api</a> | grep "Access-Control-Allow-Origin"<br> </li></ul><ol start="2"><li>Cookie跨域丢失</li></ol><ul><li>原因：默认CORS不允许携带Cookie。</li><li>解决方案：</li><li>允许凭证传递：<br>CORS_CREDENTIALS=true<br> </li><li>Dify请求头设置：<br>fetch('<a href="http://nocobase:13000/api">http://nocobase:13000/api</a>', {<br>credentials: 'include'<br>})<br> </li></ul><p>四、认证权限迷宫</p><ol><li>API密钥隐形陷阱</li></ol><ul><li>原因：Nocobase API默认需要认证，Dify未携带有效密钥。</li><li>解决方案：</li><li>生成API密钥：在Nocobase管理后台创建密钥，并在Dify请求头中添加：<br>headers: {<br>'Authorization': 'Bearer YOUR_API_KEY'<br>}<br> </li><li>临时禁用认证（仅测试用）：<br>AUTH_DISABLED=true<br> </li></ul><ol start="2"><li>权限不足的幽灵</li></ol><ul><li>原因：Nocobase角色权限配置过严，阻止Dify访问特定端点。</li><li>解决方案：</li><li>检查权限模型：在Nocobase管理后台为API端点配置允许的角色。</li><li>使用Root用户测试：<br>docker exec -it nocobase noco user:login <a href="mailto:root@nocobase.com">root@nocobase.com</a><br> </li></ul><p>五、服务依赖定时炸弹</p><ol><li>启动顺序失控</li></ol><ul><li>原因：Dify在Nocobase未完全启动时尝试连接。</li><li>解决方案：</li><li>健康检查机制：在Nocobase服务中添加：<br>healthcheck:<br>test: ["CMD-SHELL", "curl -f <a href="http://localhost:80/health">http://localhost:80/health</a> || exit 1"]<br>interval: 5s<br>timeout: 5s<br>retries: 5<br> </li><li>依赖条件设置：<br>depends_on:<br>nocobase:<br>  condition: service_healthy<br> </li></ul><ol start="2"><li>数据库迁移失败</li></ol><ul><li>原因：Nocobase数据库未初始化，Dify尝试连接失败。</li><li>解决方案：</li><li>手动执行迁移：<br>docker exec -it nocobase noco migrate<br> </li><li>等待数据库就绪：在Dify启动脚本中添加：<br>while ! nc -z nocobase 3306; do sleep 1; done<br> </li></ul><p>六、日志排查沼泽</p><ol><li>关键信息隐藏</li></ol><ul><li>原因：Nocobase默认日志级别过低，未记录关键错误。</li><li>解决方案：</li><li>启用调试日志：<br>LOG_LEVEL=debug<br> </li><li>实时监控日志：<br>docker logs -f nocobase<br> </li></ul><ol start="2"><li>容器状态误判</li></ol><ul><li>原因：容器看似运行，但实际服务崩溃。</li><li>解决方案：</li><li>检查进程状态：<br>docker exec -it nocobase ps aux | grep node<br> </li><li>查看退出代码：<br>docker inspect --format='{{.State.ExitCode}}' nocobase<br> </li></ul><p>终极避坑路线图</p><p>graph TD</p><pre><code>A[启动失败] --&gt; B{容器网络是否互通?}
B --&gt;|否| C[检查自定义网络配置]
B --&gt;|是| D{端口是否正确映射?}
D --&gt;|否| E[修正端口映射]
D --&gt;|是| F{CORS头是否正确?}
F --&gt;|否| G[配置Nocobase CORS]
F --&gt;|是| H{认证信息是否有效?}
H --&gt;|否| I[检查API密钥/JWT]
H --&gt;|是| J{服务是否健康?}
J --&gt;|否| K[修复依赖服务]
J --&gt;|是| L{日志是否有错误?}
L --&gt;|是| M[根据日志修复问题]
L --&gt;|否| N[检查版本兼容性]</code></pre><p> </p><p>总结</p><p>这六大坑点覆盖了Docker部署中的网络、端口、跨域、认证、依赖、日志六大核心维度。每个坑点都有明确的技术特征和标准化解决方案：</p><p>1. 网络通信：强制使用自定义网络，避免localhost陷阱。<br>2. 端口映射：动态分配端口，验证容器内监听状态。<br>3. CORS配置：全局设置允许源，启用凭证传递。<br>4. 认证权限：生成API密钥，检查角色权限。<br>5. 服务依赖：健康检查+条件依赖，确保服务就绪。<br>6. 日志排查：启用调试日志，实时监控进程状态。</p><p>建议采用分阶段验证法：先确保Nocobase独立运行正常，再逐步集成Dify。每完成一个组件部署，立即通过 curl 、Postman等工具验证API可达性，将问题扼杀在萌芽状态。同时，务必保留完整的 docker-compose.yml 和 .env 文件，方便后续故障回溯。</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://zzs.tdcktz.com/index.php/archives/110/#comments</comments>
<wfw:commentRss>https://zzs.tdcktz.com/index.php/feed/tag/docker/archives/110/</wfw:commentRss>
</item>
<item>
<title>备注：nocobase升级错误避坑</title>
<link>https://zzs.tdcktz.com/index.php/archives/107/</link>
<guid>https://zzs.tdcktz.com/index.php/archives/107/</guid>
<pubDate>Wed, 04 Jun 2025 23:04:20 +0000</pubDate>
<dc:creator>钟志胜</dc:creator>
<category><![CDATA[智胜人生]]></category>
<description><![CDATA[root@lavm-ka9wkt4xbk:/xp/www/xxx.com/nocobase# docker-compose pullPulling app ... doneroot@lavm-k...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<pre><code>root@lavm-ka9wkt4xbk:/xp/www/xxx.com/nocobase# docker-compose pull
Pulling app ... done
root@lavm-ka9wkt4xbk:/xp/www/xxx.com/nocobase# docker-compose up -d app
Recreating jsq-nocobase ... 

ERROR: for jsq-nocobase  &#039;ContainerConfig&#039;

ERROR: for app  &#039;ContainerConfig&#039;
Traceback (most recent call last):
  File &quot;/usr/bin/docker-compose&quot;, line 33, in &lt;module&gt;
    sys.exit(load_entry_point(&#039;docker-compose==1.29.2&#039;, &#039;console_scripts&#039;, &#039;docker-compose&#039;)())
  File &quot;/usr/lib/python3/dist-packages/compose/cli/main.py&quot;, line 81, in main
    command_func()
  File &quot;/usr/lib/python3/dist-packages/compose/cli/main.py&quot;, line 203, in perform_command
    handler(command, command_options)
  File &quot;/usr/lib/python3/dist-packages/compose/metrics/decorator.py&quot;, line 18, in wrapper
    result = fn(*args, **kwargs)
  File &quot;/usr/lib/python3/dist-packages/compose/cli/main.py&quot;, line 1186, in up
    to_attach = up(False)
  File &quot;/usr/lib/python3/dist-packages/compose/cli/main.py&quot;, line 1166, in up
    return self.project.up(
  File &quot;/usr/lib/python3/dist-packages/compose/project.py&quot;, line 697, in up
    results, errors = parallel.parallel_execute(
  File &quot;/usr/lib/python3/dist-packages/compose/parallel.py&quot;, line 108, in parallel_execute
    raise error_to_reraise
  File &quot;/usr/lib/python3/dist-packages/compose/parallel.py&quot;, line 206, in producer
    result = func(obj)
  File &quot;/usr/lib/python3/dist-packages/compose/project.py&quot;, line 679, in do
    return service.execute_convergence_plan(
  File &quot;/usr/lib/python3/dist-packages/compose/service.py&quot;, line 579, in execute_convergence_plan
    return self._execute_convergence_recreate(
  File &quot;/usr/lib/python3/dist-packages/compose/service.py&quot;, line 499, in _execute_convergence_recreate
    containers, errors = parallel_execute(
  File &quot;/usr/lib/python3/dist-packages/compose/parallel.py&quot;, line 108, in parallel_execute
    raise error_to_reraise
  File &quot;/usr/lib/python3/dist-packages/compose/parallel.py&quot;, line 206, in producer
    result = func(obj)
  File &quot;/usr/lib/python3/dist-packages/compose/service.py&quot;, line 494, in recreate
    return self.recreate_container(
  File &quot;/usr/lib/python3/dist-packages/compose/service.py&quot;, line 612, in recreate_container
    new_container = self.create_container(
  File &quot;/usr/lib/python3/dist-packages/compose/service.py&quot;, line 330, in create_container
    container_options = self._get_container_create_options(
  File &quot;/usr/lib/python3/dist-packages/compose/service.py&quot;, line 921, in _get_container_create_options
    container_options, override_options = self._build_container_volume_options(
  File &quot;/usr/lib/python3/dist-packages/compose/service.py&quot;, line 960, in _build_container_volume_options
    binds, affinity = merge_volume_bindings(
  File &quot;/usr/lib/python3/dist-packages/compose/service.py&quot;, line 1548, in merge_volume_bindings
    old_volumes, old_mounts = get_container_data_volumes(
  File &quot;/usr/lib/python3/dist-packages/compose/service.py&quot;, line 1579, in get_container_data_volumes
    container.image_config[&#039;ContainerConfig&#039;].get(&#039;Volumes&#039;) or {}
KeyError: &#039;ContainerConfig&#039;
root@lavm-ka9wkt4xbk:/xp/www/xxx.com/nocobase# docker-compose down
Removing 1249a20f302e_jsq-nocobase ... done
Removing network nocobase_nocobase
root@lavm-ka9wkt4xbk:/xp/www/xxx.com/nocobase# docker-compose pull
Pulling app ... done
root@lavm-ka9wkt4xbk:/xp/www/xxx.com/nocobase# docker-compose up -d app
Creating network &quot;nocobase_nocobase&quot; with driver &quot;bridge&quot;
Creating jsq-nocobase ... done
root@lavm-ka9wkt4xbk:/xp/www/xxx.com/nocobase# </code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://zzs.tdcktz.com/index.php/archives/107/#comments</comments>
<wfw:commentRss>https://zzs.tdcktz.com/index.php/feed/tag/docker/archives/107/</wfw:commentRss>
</item>
<item>
<title>豆包深度分析：通过Docker部署CRMEB Java版本</title>
<link>https://zzs.tdcktz.com/index.php/archives/85/</link>
<guid>https://zzs.tdcktz.com/index.php/archives/85/</guid>
<pubDate>Fri, 23 May 2025 22:57:00 +0000</pubDate>
<dc:creator>钟志胜</dc:creator>
<category><![CDATA[技术相关]]></category>
<description><![CDATA[CRMEB Java版本完全支持Docker部署，且官方提供了Docker镜像和配置示例，可显著简化部署流程。以下是具体实现方案：一、Docker部署优势环境隔离：避免与现有系统环境冲突，确保J...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>CRMEB Java版本完全支持Docker部署，且官方提供了Docker镜像和配置示例，可显著简化部署流程。以下是具体实现方案：</p><h3><strong>一、Docker部署优势</strong></h3><ol><li><strong>环境隔离</strong>：避免与现有系统环境冲突，确保Java版本依赖（如JDK 1.8+、MySQL 5.7+）一致性。</li><li><strong>快速部署</strong>：单节点部署时间从传统方式的2-3天缩短至1小时内。</li><li><strong>弹性扩展</strong>：支持Docker Compose或Kubernetes集群部署，轻松应对高并发场景（如双11促销）。</li><li><strong>版本管理</strong>：通过镜像标签（如<code>crmeb/crmeb-java:v4.4.2</code>）快速回滚或升级。</li></ol><h3><strong>二、单节点Docker部署步骤</strong></h3><h4><strong>1. 环境准备</strong></h4><ul><li><strong>服务器配置</strong>：4核8G以上，推荐8核16G（生产环境）</li><li><strong>软件依赖</strong>：Docker 20.10+、Docker Compose 1.29+</li></ul><h4><strong>2. 下载Docker Compose配置</strong></h4><pre><code class="lang-yaml">version: &#039;3&#039;
services:
  # MySQL服务
  mysql:
    image: mysql:5.7
    container_name: crmeb-mysql
    restart: always
    ports:
      - &quot;3306:3306&quot;
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: crmeb
      MYSQL_USER: crmeb
      MYSQL_PASSWORD: crmeb123

  # Redis服务
  redis:
    image: redis:6.2
    container_name: crmeb-redis
    restart: always
    ports:
      - &quot;6379:6379&quot;
    volumes:
      - ./redis/data:/data

  # CRMEB Java服务
  crmeb-java:
    image: crmeb/crmeb-java:v4.4.2  # 替换为最新版本
    container_name: crmeb-java
    restart: always
    ports:
      - &quot;8080:8080&quot;
    volumes:
      - ./crmeb/config:/app/config
      - ./crmeb/logs:/app/logs
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/crmeb?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai
      - SPRING_DATASOURCE_USERNAME=crmeb
      - SPRING_DATASOURCE_PASSWORD=crmeb123
      - SPRING_REDIS_HOST=redis
      - SPRING_REDIS_PORT=6379
    depends_on:
      - mysql
      - redis</code></pre><h4><strong>3. 启动容器</strong></h4><pre><code class="lang-bash"># 创建目录结构
mkdir -p crmeb-docker/mysql/{data,conf} crmeb-docker/redis/data crmeb-docker/crmeb/{config,logs}

# 下载docker-compose.yml到crmeb-docker目录
wget -O crmeb-docker/docker-compose.yml https://example.com/crmeb-java-docker-compose.yml

# 启动服务
cd crmeb-docker &amp;&amp; docker-compose up -d</code></pre><h4><strong>4. 验证部署</strong></h4><ul><li>访问 <code>http://服务器IP:8080</code> 查看CRMEB管理后台登录页面</li><li>检查容器状态：<code>docker ps -a</code></li><li>查看日志：<code>docker logs -f crmeb-java</code></li></ul><h3><strong>三、生产环境高可用部署</strong></h3><h4><strong>1. 集群架构设计</strong></h4><ul><li><strong>负载均衡</strong>：Nginx或Traefik</li><li><strong>应用层</strong>：3个CRMEB Java实例（部署在不同物理机）</li><li><strong>数据层</strong>：MySQL主从复制 + Redis集群</li></ul><h4><strong>2. Docker Swarm部署示例</strong></h4><pre><code class="lang-yaml">version: &#039;3.8&#039;
services:
  crmeb-java:
    image: crmeb/crmeb-java:v4.4.2
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure
    ports:
      - &quot;80:8080&quot;
    networks:
      - crmeb-network
    secrets:
      - db-password
      - redis-password

networks:
  crmeb-network:

secrets:
  db-password:
    external: true
  redis-password:
    external: true</code></pre><h3><strong>四、注意事项</strong></h3><ol><li><strong>数据持久化</strong>：确保MySQL和Redis数据目录挂载到宿主机，避免容器重建导致数据丢失。</li><li><p><strong>配置优化</strong>：</p><ul><li>修改<code>crmeb/config/application-prod.yml</code>调整JVM参数（如<code>-Xmx2g -Xms2g</code>）</li><li>调整MySQL配置（如<code>innodb_buffer_pool_size=2G</code>）</li></ul></li><li><p><strong>安全加固</strong>：</p><ul><li>禁用不必要的端口暴露</li><li>定期更新镜像（<code>docker-compose pull &amp;&amp; docker-compose up -d</code>）</li><li>添加防火墙规则（如<code>ufw allow 80/tcp</code>）</li></ul></li></ol><h3><strong>五、泉州地区部署建议</strong></h3><ol><li><p><strong>云服务选择</strong>：</p><ul><li>中小型企业：阿里云ECS（4核8G）+ RDS MySQL（2核4G）+ Redis实例，月成本约1500元。</li><li>大型企业：自建物理机集群（3台8核16G服务器），年成本约8-10万元。</li></ul></li><li><p><strong>本地技术支持</strong>：</p><ul><li>与泉州本地Docker服务商合作（如泉州某科技公司），提供7×24小时运维服务。</li><li>利用泉州PHP开发者社区资源，快速解决部署问题。</li></ul></li></ol><h3><strong>六、常见问题与解决方案</strong></h3><table><thead><tr><th><strong>问题</strong></th><th><strong>解决方案</strong></th></tr></thead><tbody><tr><td>容器启动失败</td><td>检查<code>docker logs</code>输出，确认数据库连接参数是否正确</td></tr><tr><td>访问超时</td><td>检查Nginx配置，调整<code>proxy_connect_timeout</code>和<code>proxy_send_timeout</code>参数</td></tr><tr><td>内存溢出</td><td>在<code>docker-compose.yml</code>中添加<code>JVM_OPTS</code>环境变量，如<code>-Xmx1g -Xms1g</code></td></tr><tr><td>数据库连接池耗尽</td><td>修改<code>application-prod.yml</code>，增加<code>spring.datasource.hikari.maximum-pool-size</code>值（推荐15-20）</td></tr></tbody></table><p>通过Docker部署CRMEB Java版本，可显著降低部署复杂度和运维成本，尤其适合泉州地区技术团队规模较小的企业。建议在测试环境验证后再迁移至生产环境，并预留20%的硬件资源应对业务增长。</p><h2>CRMEB Java版本的官方Docker部署资源可通过以下渠道获取：</h2><h3><strong>一、官方文档指南</strong></h3><p>CRMEB官方提供了完整的Docker部署文档，包含从环境准备到集群配置的全流程说明：</p><ul><li><p><strong>文档链接</strong>：<a href="https://doc.crmeb.com/java/crmeb_java">https://doc.crmeb.com/java/crmeb_java</a></p><ul><li><p><strong>核心内容</strong>：</p><ul><li>Docker Compose配置示例（含MySQL、Redis、CRMEB Java服务）</li><li>生产环境高可用架构设计（Nginx负载均衡+容器集群）</li><li>镜像构建与版本管理策略</li><li>常见问题排查（如端口冲突、内存溢出）</li></ul></li></ul></li></ul><h3><strong>二、GitHub仓库资源</strong></h3><p>官方Java版本的GitHub仓库提供了Docker相关的配置文件和部署脚本：</p><ul><li><p><strong>仓库地址</strong>：<a href="https://gitee.com/ZhongBangKeJi/crmeb_java">https://gitee.com/ZhongBangKeJi/crmeb_java</a></p><ul><li><p><strong>关键文件</strong>：</p><ul><li><code>docker-compose.yml</code>：基础单节点部署配置</li><li><code>Dockerfile</code>：自定义镜像构建模板</li><li><code>application-prod.yml</code>：生产环境配置模板</li></ul></li></ul></li></ul><h3><strong>三、镜像获取方式</strong></h3><p>CRMEB Java版本的Docker镜像可通过以下两种方式获取：</p><ol><li><p><strong>官方镜像仓库</strong>（推荐）：</p><ul><li><strong>镜像地址</strong>：<code>crmeb/crmeb-java:v4.4.2</code>（需替换为最新版本）</li><li><p><strong>拉取命令</strong>：</p><pre><code class="lang-bash">docker pull crmeb/crmeb-java:v4.4.2</code></pre></li><li><strong>版本说明</strong>：通过标签（如<code>v4.4.2</code>）指定版本，可在官方文档中查看最新镜像版本</li></ul></li><li><p><strong>自行构建镜像</strong>：</p><ul><li><p>从GitHub仓库下载代码后，执行以下命令构建：</p><pre><code class="lang-bash">docker build -t crmeb-java:latest .</code></pre></li><li><strong>优势</strong>：可根据项目需求定制依赖（如添加自定义插件）</li></ul></li></ol><h3><strong>四、泉州地区部署优化建议</strong></h3><ol><li><p><strong>网络加速</strong>：</p><ul><li><p>使用国内镜像源（如阿里云、USTC）加速镜像拉取：</p><pre><code class="lang-bash"># 修改Docker配置文件 /etc/docker/daemon.json
{
  &quot;registry-mirrors&quot;: [&quot;https://docker.mirrors.ustc.edu.cn/&quot;]
}</code></pre></li></ul></li><li><p><strong>本地技术支持</strong>：</p><ul><li>与泉州本地技术团队合作（如厦门、福州的Java开发公司），降低沟通成本</li><li>加入泉州PHP开发者社区，获取本地化技术资源</li></ul></li></ol><h3><strong>五、验证与反馈</strong></h3><ul><li><p><strong>部署验证</strong>：</p><ol><li>启动容器后访问 <code>http://服务器IP:8080</code>，检查登录页面是否正常加载</li><li>执行 <code>docker logs -f crmeb-java</code> 查看服务日志，确认无报错信息</li><li>使用Postman测试核心API接口（如商品列表、订单创建）</li></ol></li><li><p><strong>版本更新</strong>：</p><ul><li>定期执行 <code>docker-compose pull &amp;&amp; docker-compose up -d</code> 更新镜像</li><li>关注官方文档的版本更新说明，避免兼容性问题</li></ul></li></ul><p>通过以上链接和资源，可快速完成CRMEB Java版本的Docker部署。建议在测试环境验证后再迁移至生产环境，并预留20%的硬件资源应对业务增长。</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://zzs.tdcktz.com/index.php/archives/85/#comments</comments>
<wfw:commentRss>https://zzs.tdcktz.com/index.php/feed/tag/docker/archives/85/</wfw:commentRss>
</item>
<item>
<title>用Docker compose部署pocketbase的配置文件和初始化管理员用户和密码的办法</title>
<link>https://zzs.tdcktz.com/index.php/archives/54/</link>
<guid>https://zzs.tdcktz.com/index.php/archives/54/</guid>
<pubDate>Wed, 30 Apr 2025 05:05:00 +0000</pubDate>
<dc:creator>钟志胜</dc:creator>
<category><![CDATA[技术相关]]></category>
<description><![CDATA[docker-compose.yml配置文件services:  pocketbase:    image: ghcr.nju.edu.cn/muchobien/pocketbase:lates...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>docker-compose.yml配置文件</h2><pre><code>services:
  pocketbase:
    image: ghcr.nju.edu.cn/muchobien/pocketbase:latest
    container_name: pocketbase
    restart: unless-stopped
    ports:
      - &quot;127.0.0.1:8090:8090&quot;  # 仅本地访问
    environment:
      - POCKETBASE_DEBUG=false  # 生产环境禁用调试模式
    volumes:
      - ./pb_data:/pb_data
      - ./backups:/backups  # 备份目录
    healthcheck:  # 健康检查[3]()
      test: wget --no-verbose --tries=1 --spider http://127.0.0.1:8090/api/health || exit 1
      interval: 5s
      timeout: 5s
      retries: 5
    logging:  # 日志优化[2]()
      driver: &quot;json-file&quot;
      options:
        max-size: &quot;10m&quot;
        max-file: &quot;3&quot;
    deploy:  # 资源限制（兼容Swarm）
      resources:
        limits:
          cpus: &#039;1.0&#039;
          memory: 512M</code></pre><h2>初始化管理员用户和密码的办法：运行下面的命令获取</h2><pre><code>docker logs pocketbase</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://zzs.tdcktz.com/index.php/archives/54/#comments</comments>
<wfw:commentRss>https://zzs.tdcktz.com/index.php/feed/tag/docker/archives/54/</wfw:commentRss>
</item>
<item>
<title>让pocketbase的启动命令./pocketbase serve 常驻内存，失败后还能自动重启的方案</title>
<link>https://zzs.tdcktz.com/index.php/archives/53/</link>
<guid>https://zzs.tdcktz.com/index.php/archives/53/</guid>
<pubDate>Tue, 29 Apr 2025 23:50:29 +0000</pubDate>
<dc:creator>钟志胜</dc:creator>
<category><![CDATA[技术相关]]></category>
<description><![CDATA[为了确保 PocketBase 的 ./pocketbase serve 命令常驻内存并在失败后自动重启，可以使用 systemd 或 supervisord 等工具进行管理。以下是详细的解决方...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>为了确保 PocketBase 的 <code>./pocketbase serve</code> 命令常驻内存并在失败后自动重启，可以使用 <strong>systemd</strong> 或 <strong>supervisord</strong> 等工具进行管理。以下是详细的解决方案：</p><hr><h3><strong>方法一：使用 systemd（推荐）</strong></h3><p><code>systemd</code> 是 Linux 系统的标准服务管理工具，适合长期运行的服务。</p><h4>1. 创建 systemd 服务文件</h4><p>在 <code>/etc/systemd/system/</code> 目录下创建一个新的服务文件，例如 <code>pocketbase.service</code>：</p><pre><code class="lang-bash">sudo nano /etc/systemd/system/pocketbase.service</code></pre><h4>2. 配置服务内容</h4><p>将以下内容粘贴到文件中（根据你的实际路径调整）：</p><pre><code class="lang-ini">[Unit]
Description=PocketBase Service
After=network.target

[Service]
# 替换为你的 PocketBase 可执行文件路径
ExecStart=/path/to/pocketbase serve
# 设置工作目录（可选）
WorkingDirectory=/path/to/your/pocketbase/project
# 以哪个用户身份运行（可选）
User=your-username
# 自动重启配置
Restart=always
# 日志输出（可选）
StandardOutput=file:/var/log/pocketbase.log
StandardError=file:/var/log/pocketbase-err.log

[Install]
WantedBy=multi-user.target</code></pre><h4>3. 重新加载 systemd 配置</h4><pre><code class="lang-bash">sudo systemctl daemon-reload</code></pre><h4>4. 启动并启用服务</h4><pre><code class="lang-bash">sudo systemctl start pocketbase
sudo systemctl enable pocketbase</code></pre><h4>5. 验证服务状态</h4><pre><code class="lang-bash">sudo systemctl status pocketbase</code></pre><ul><li>如果服务失败，<code>systemd</code> 会自动重启它（<code>Restart=always</code>）。</li></ul><hr><h3><strong>方法二：使用 supervisord</strong></h3><p><code>supervisord</code> 是一个进程管理工具，适合需要更灵活控制的场景。</p><h4>1. 安装 supervisord</h4><pre><code class="lang-bash"># Ubuntu/Debian
sudo apt-get install supervisor

# CentOS/RHEL
sudo yum install epel-release
sudo yum install supervisor</code></pre><h4>2. 创建配置文件</h4><p>在 <code>/etc/supervisor/conf.d/</code> 目录下创建 <code>pocketbase.conf</code>：</p><pre><code class="lang-bash">sudo nano /etc/supervisor/conf.d/pocketbase.conf</code></pre><h4>3. 配置内容</h4><pre><code class="lang-ini">[program:pocketbase]
command=/path/to/pocketbase serve
directory=/path/to/your/pocketbase/project
user=your-username
autostart=true
autorestart=true
stdout_logfile=/var/log/pocketbase.log
stderr_logfile=/var/log/pocketbase-err.log</code></pre><h4>4. 重新加载配置</h4><pre><code class="lang-bash">sudo supervisorctl reread
sudo supervisorctl update</code></pre><h4>5. 启动服务</h4><pre><code class="lang-bash">sudo supervisorctl start pocketbase</code></pre><h4>6. 验证状态</h4><pre><code class="lang-bash">sudo supervisorctl status pocketbase</code></pre><hr><h3><strong>其他注意事项</strong></h3><ol><li><p><strong>权限问题</strong>  <br>确保 PocketBase 可执行文件有可执行权限：</p><pre><code class="lang-bash">chmod +x /path/to/pocketbase</code></pre></li><li><strong>配置文件路径</strong>  <br>如果使用自定义配置文件（如 <code>./pocketbase serve --config ./my-config.json</code>），需在 <code>ExecStart</code> 中指定完整路径。</li><li><p><strong>日志管理</strong>  <br>建议将日志输出到文件，方便排查问题。例如：</p><pre><code class="lang-bash">ExecStart=/path/to/pocketbase serve &gt;&gt; /var/log/pocketbase.log 2&gt;&amp;1</code></pre></li><li><p><strong>容器化方案（可选）</strong>  <br>如果使用 Docker，可以通过 <code>docker run</code> 的 <code>--restart always</code> 参数实现自动重启：</p><pre><code class="lang-bash">docker run -d --name pocketbase -p 8090:8090 --restart always ghcr.io/pocketbase/pocketbase:latest serve</code></pre></li></ol><hr><h3><strong>验证自动重启功能</strong></h3><ul><li><p>手动终止进程：</p><pre><code class="lang-bash">killall pocketbase</code></pre></li><li><p>检查服务状态：</p><pre><code class="lang-bash">systemctl status pocketbase  # 或 supervisorctl status pocketbase</code></pre></li></ul><p>通过以上方法，PocketBase 将始终在后台运行，并在异常退出时自动重启。选择 <code>systemd</code> 更适合大多数场景，而 <code>supervisord</code> 提供了更细粒度的控制。</p><h2>更优解的方案</h2><p>为了实现 <strong>PocketBase 的 <code>./pocketbase serve</code> 命令常驻内存并在失败后自动重启</strong>，我们可以在不依赖第三方工具的前提下，通过更<strong>简洁、高效、可维护</strong>的方式来优化原有的解决方案。以下是一个经过优化的、更加现代化的方案设计思路。</p><hr><h2>✅ 优化目标</h2><ul><li><strong>最小化依赖</strong>：避免引入过多外部组件（如 <code>supervisord</code> 或 <code>docker</code>）；</li><li><strong>高可靠性</strong>：确保服务崩溃后能够自动重启；</li><li><strong>易于维护</strong>：配置简洁、日志清晰、便于排查问题；</li><li><strong>跨平台兼容</strong>：适用于 Linux 和 macOS 环境。</li></ul><hr><h2>🛠️ 优化方案一：使用 <code>systemd</code>（推荐）</h2><h3>✅ 优点：</h3><ul><li>系统原生支持，稳定性高；</li><li>配置简单，易于管理；</li><li>支持日志输出、自动重启等功能。</li></ul><h3>🔧 优化后的配置文件示例：</h3><pre><code class="lang-ini">[Unit]
Description=PocketBase Service
After=network.target

[Service]
ExecStart=/path/to/pocketbase serve
WorkingDirectory=/path/to/pocketbase/project
User=pocketbase
Restart=always
RestartSec=5s
StandardOutput=file:/var/log/pocketbase.log
StandardError=file:/var/log/pocketbase-err.log
Environment=&quot;PORT=8090&quot;
Environment=&quot;DB_PATH=/path/to/db&quot;

[Install]
WantedBy=multi-user.target</code></pre><h3>⚙️ 优化点说明：</h3><ul><li><strong><code>RestartSec=5s</code></strong>：服务崩溃后等待 5 秒再重启，防止频繁重启；</li><li><strong><code>Environment</code></strong>：直接在配置中定义环境变量，避免修改启动脚本；</li><li><strong><code>User=pocketbase</code></strong>：指定以非 root 用户运行，提高安全性；</li><li><strong>日志路径统一管理</strong>：便于集中查看日志。</li></ul><h3>📌 启动与验证</h3><pre><code class="lang-bash">sudo systemctl daemon-reload
sudo systemctl enable pocketbase
sudo systemctl start pocketbase
sudo systemctl status pocketbase</code></pre><hr><h2>🛠️ 优化方案二：使用 Shell 脚本 + <code>nohup</code>（轻量级）</h2><p>如果你不想使用 <code>systemd</code>，可以采用一个<strong>轻量级、易用</strong>的 Shell 脚本方式，适用于快速部署或临时测试环境。</p><h3>📜 示例脚本：<code>start-pocketbase.sh</code></h3><pre><code class="lang-bash">#!/bin/bash

LOGFILE=&quot;/var/log/pocketbase.log&quot;
PIDFILE=&quot;/tmp/pocketbase.pid&quot;

while true; do
    echo &quot;Starting PocketBase...&quot;
    /path/to/pocketbase serve &gt;&gt; &quot;$LOGFILE&quot; 2&gt;&amp;1 &amp;
    PID=$!
    echo $PID &gt; &quot;$PIDFILE&quot;
    wait $PID
    RC=$?
    echo &quot;PocketBase exited with code $RC. Restarting in 5 seconds...&quot;
    sleep 5
done</code></pre><h3>📌 使用方式：</h3><pre><code class="lang-bash">chmod +x start-pocketbase.sh
nohup ./start-pocketbase.sh &amp;</code></pre><h3>⚠️ 注意事项：</h3><ul><li>此脚本会持续运行，但<strong>不具备系统级服务管理能力</strong>；</li><li>不适合生产环境，仅适合临时测试或开发环境；</li><li>若需持久运行，建议结合 <code>systemd</code> 使用。</li></ul><hr><h2>🛠️ 优化方案三：使用 Docker（容器化部署）</h2><p>如果你希望更<strong>标准化、可移植</strong>地部署 PocketBase，使用 Docker 是一种非常高效的方式。</p><h3>📦 Docker 镜像</h3><pre><code class="lang-bash">docker run -d \
  --name pocketbase \
  -p 8090:8090 \
  --restart always \
  ghcr.io/pocketbase/pocketbase:latest serve</code></pre><h3>✅ 优势：</h3><ul><li><strong>自动重启</strong>：<code>--restart always</code> 确保容器崩溃后自动重启；</li><li><strong>隔离性强</strong>：避免依赖冲突；</li><li><strong>跨平台</strong>：可在任何支持 Docker 的环境中运行；</li><li><strong>版本控制</strong>：方便回滚或升级。</li></ul><hr><h2>📊 总结：哪种方案最适合你？</h2><table><thead><tr><th>方案</th><th>适用场景</th><th>优点</th><th>缺点</th></tr></thead><tbody><tr><td><code>systemd</code></td><td>生产环境</td><td>稳定、可控、日志清晰</td><td>需要配置文件</td></tr><tr><td>Shell 脚本</td><td>开发/测试环境</td><td>快速部署、无需安装</td><td>无系统级管理</td></tr><tr><td>Docker</td><td>容器化部署</td><td>易于迁移、版本控制</td><td>依赖 Docker 环境</td></tr></tbody></table><hr><h2>🧩 最佳实践建议</h2><ul><li>如果你正在部署到<strong>生产服务器</strong>，<strong>优先使用 <code>systemd</code></strong>；</li><li>如果你在做<strong>快速原型或开发测试</strong>，可以使用 <strong>Shell 脚本</strong>；</li><li>如果你追求<strong>一致性、可扩展性</strong>，<strong>Docker 是最佳选择</strong>。</li></ul><hr><p>通过以上优化方案，你可以实现 <strong>更简洁、更可靠、更易维护</strong> 的 PocketBase 自动重启机制。根据你的具体需求选择最合适的方案即可。</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://zzs.tdcktz.com/index.php/archives/53/#comments</comments>
<wfw:commentRss>https://zzs.tdcktz.com/index.php/feed/tag/docker/archives/53/</wfw:commentRss>
</item>
<item>
<title>docker pull很慢的时候</title>
<link>https://zzs.tdcktz.com/index.php/archives/7/</link>
<guid>https://zzs.tdcktz.com/index.php/archives/7/</guid>
<pubDate>Tue, 01 Apr 2025 05:12:00 +0000</pubDate>
<dc:creator>钟志胜</dc:creator>
<category><![CDATA[技术相关]]></category>
<description><![CDATA[用国内镜像，将下面的代码替换：/etc/docker/daemon.json{  &quot;registry-mirrors&quot; : [&quot;http://hub-mirror....]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>用国内镜像，将下面的代码替换：/etc/docker/daemon.json</p><pre><code>{
  &quot;registry-mirrors&quot; : [
&quot;http://hub-mirror.c.163.com&quot;,
&quot;https://mirror.baidubce.com&quot;,
&quot;https://docker.m.daocloud.io&quot;,
&quot;https://gst6rzl9.mirror.aliyuncs.com&quot;,
&quot;https://registry.docker-cn.com&quot;,   
   
&quot;https://docker.registry.cyou&quot;,
&quot;https://docker-cf.registry.cyou&quot;,
&quot;https://dockercf.jsdelivr.fyi&quot;,
&quot;https://docker.jsdelivr.fyi&quot;,
&quot;https://dockertest.jsdelivr.fyi&quot;,
&quot;https://mirror.aliyuncs.com&quot;,
&quot;https://dockerproxy.com&quot;,
&quot;https://docker.nju.edu.cn&quot;,
&quot;https://docker.mirrors.sjtug.sjtu.edu.cn&quot;,
&quot;https://docker.mirrors.ustc.edu.cn&quot;,
&quot;https://mirror.iscas.ac.cn&quot;,
&quot;https://docker.rainbond.cc&quot;,
&quot;https://do.nark.eu.org&quot;,
&quot;https://dc.j8.work&quot;,


&quot;http://mirrors.ustc.edu.cn/&quot;,
&quot;https://mirrors.tuna.tsinghua.edu.cn/&quot;,
&quot;http://mirrors.sohu.com/&quot;
],
 &quot;insecure-registries&quot; : [
    &quot;hub-mirror.c.163.com&quot;,
    &quot;registry.docker-cn.com&quot;,
    &quot;docker.mirrors.ustc.edu.cn&quot;
    ],
&quot;debug&quot;: true,
&quot;experimental&quot;: false
}

</code></pre><p>然后，逐一执行</p><pre><code>sudo systemctl daemon-reload
sudo systemctl restart docker
docker compose up -d</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://zzs.tdcktz.com/index.php/archives/7/#comments</comments>
<wfw:commentRss>https://zzs.tdcktz.com/index.php/feed/tag/docker/archives/7/</wfw:commentRss>
</item>
</channel>
</rss>