doc: update docs/docker-compose.md (#645) 5e22e28a2d

This commit is contained in:
jaywcjlove
2024-05-12 05:17:23 +00:00
parent e9e3a27076
commit 54fa4319d9
4 changed files with 280 additions and 14 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -33,7 +33,7 @@
<p>这是 <a href="https://docs.docker.com/compose/">docker-compose</a> 的快速参考备忘单。你可以在这里找到最常见的 Docker Compose 使用方式。</p>
</div></header><div class="menu-tocs"><div class="menu-btn"><svg aria-hidden="true" fill="currentColor" height="1em" width="1em" viewBox="0 0 16 16" version="1.1" data-view-component="true">
<path fill-rule="evenodd" d="M2 4a1 1 0 100-2 1 1 0 000 2zm3.75-1.5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zm0 5a.75.75 0 000 1.5h8.5a.75.75 0 000-1.5h-8.5zM3 8a1 1 0 11-2 0 1 1 0 012 0zm-1 6a1 1 0 100-2 1 1 0 000 2z"></path>
</svg></div><div class="menu-modal"><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#入门">入门</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#docker-compose-是什么">Docker Compose 是什么?</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#基本概念">基本概念</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#docker-compose-文件结构">Docker-Compose 文件结构</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#安装">安装</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#独立安装-compose">独立安装 Compose</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#更新-compose">更新 Compose</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#卸载-docker-compose">卸载 Docker Compose</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#检查-compose-的安装位置">检查 Compose 的安装位置</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#常用命令">常用命令</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#docker-compose-配置">Docker Compose 配置</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#示例配置文件">示例配置文件</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#使用环境变量">使用环境变量</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#额外的信息">额外的信息</a></div></div><div class="h1wrap-body"><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body">
</svg></div><div class="menu-modal"><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#入门">入门</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#docker-compose-是什么">Docker Compose 是什么?</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#基本概念">基本概念</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#docker-compose-文件结构">Docker-Compose 文件结构</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#安装">安装</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#独立安装-compose">独立安装 Compose</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#更新-compose">更新 Compose</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#卸载-docker-compose">卸载 Docker Compose</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#检查-compose-的安装位置">检查 Compose 的安装位置</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#常用命令">常用命令</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#常用命令-1">常用命令</a><a aria-hidden="true" class="leve2 tocs-link" data-num="2" href="#docker-compose-配置">Docker Compose 配置</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#示例配置文件">示例配置文件</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#使用环境变量">使用环境变量</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#额外的信息">额外的信息</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#image">image</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#ports-端口">ports 端口</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#platform-平台">platform 平台</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#command">command</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#depends_on">depends_on</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#volumes">volumes</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#driver">driver</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#driver_opts">driver_opts</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#external">external</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#labels">labels</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#name">name</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#networks">networks</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#aliases">aliases</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#ipv4_address-ipv6_address">ipv4_address, ipv6_address</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#link_local_ips">link_local_ips</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#mac_address">mac_address</a><a aria-hidden="true" class="leve4 tocs-link" data-num="4" href="#priority-优先级">priority 优先级</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#expose">expose</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#links">links</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#pids_limit">pids_limit</a><a aria-hidden="true" class="leve3 tocs-link" data-num="3" href="#devices">devices</a></div></div><div class="h1wrap-body"><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="docker-compose-是什么"><a aria-hidden="true" tabindex="-1" href="#docker-compose-是什么"><span class="icon icon-link"></span></a>Docker Compose 是什么?</h3><div class="wrap-body">
<ul>
<li><code>Docker-compsoe</code> 是一个开源项目,用于定义和运行多容器 <code>Docker</code> 应用程序的工具。由 <code>Docker</code> 社区维护。</li>
@ -176,6 +176,9 @@
<table class="left-align"><thead><tr><th>docker compose命令</th><th>说明</th><th>常见参数说明</th></tr></thead><tbody><tr><td><code>docker compose up</code></td><td>启动容器</td><td><code>-d</code> 后台运行容器</td></tr><tr><td><code>docker compose down</code></td><td>停止容器</td><td><code>-v</code> 删除容器和卷</td></tr><tr><td><code>docker compose logs</code></td><td>查看容器日志</td><td><code>-f</code> 跟随日志输出</td></tr><tr><td><code>docker compose exec</code></td><td>进入容器</td><td><code>-it</code> 启动交互式终端</td></tr><tr><td><code>docker compose pull</code></td><td>拉取镜像</td><td></td></tr><tr><td><code>docker compose build</code></td><td>构建镜像</td><td></td></tr><tr><td><code>docker compose images</code></td><td>列出镜像</td><td></td></tr><tr><td><code>docker compose push</code></td><td>推送镜像</td><td></td></tr><tr><td><code>docker compose config</code></td><td>显示配置信息</td><td></td></tr><tr><td><code>docker compose version</code></td><td>查看版本信息</td><td></td></tr></tbody></table>
<!--rehype:className=left-align-->
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="常用命令-1"><a aria-hidden="true" tabindex="-1" href="#常用命令-1"><span class="icon icon-link"></span></a>常用命令</h3><div class="wrap-body">
@ -206,43 +209,42 @@
<table class="left-align"><thead><tr><th>docker compose命令</th><th>说明</th><th>常见参数说明</th></tr></thead><tbody><tr><td><code>docker compose up</code></td><td>启动容器</td><td><code>-d</code> 后台运行容器</td></tr><tr><td><code>docker compose down</code></td><td>停止容器</td><td><code>-v</code> 删除容器和卷</td></tr><tr><td><code>docker compose ps</code></td><td>查看容器状态</td><td></td></tr><tr><td><code>docker compose logs</code></td><td>查看容器日志</td><td><code>-f</code> 跟随日志输出</td></tr><tr><td><code>docker compose exec</code></td><td>进入容器</td><td><code>-it</code> 启动交互式终端</td></tr><tr><td><code>docker compose build</code></td><td>构建镜像</td><td></td></tr><tr><td><code>docker compose rm</code></td><td>删除容器</td><td></td></tr><tr><td><code>docker compose stop</code></td><td>停止容器</td><td></td></tr><tr><td><code>docker compose start</code></td><td>启动容器</td><td></td></tr><tr><td><code>docker compose restart</code></td><td>重启容器</td><td></td></tr><tr><td><code>docker compose pull</code></td><td>拉取镜像</td><td></td></tr><tr><td><code>docker compose run</code></td><td>运行一个临时容器</td><td></td></tr><tr><td><code>docker compose config</code></td><td>显示配置信息</td><td></td></tr><tr><td><code>docker compose images</code></td><td>列出镜像</td><td></td></tr><tr><td><code>docker compose push</code></td><td>推送镜像</td><td></td></tr><tr><td><code>docker compose version</code></td><td>查看版本信息</td><td></td></tr></tbody></table>
<table class="left-align"><thead><tr><th>docker compose命令</th><th>说明</th></tr></thead><tbody><tr><td><code>docker compose stop</code></td><td>停止容器</td></tr><tr><td><code>docker compose start</code></td><td>启动容器</td></tr><tr><td><code>docker compose rm</code></td><td>删除容器</td></tr><tr><td><code>docker compose restart</code></td><td>重启容器</td></tr><tr><td><code>docker compose run</code></td><td>运行一个临时容器</td></tr><tr><td><code>docker compose ps</code></td><td>查看容器状态</td></tr></tbody></table>
<!--rehype:className=left-align-->
</div></div></div></div></div><div class="wrap h2body-exist"><div class="wrap-header h2wrap"><h2 id="docker-compose-配置"><a aria-hidden="true" tabindex="-1" href="#docker-compose-配置"><span class="icon icon-link"></span></a>Docker Compose 配置</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="示例配置文件"><a aria-hidden="true" tabindex="-1" href="#示例配置文件"><span class="icon icon-link"></span></a>示例配置文件</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<p><code>docker-compose</code> 的配置文件是一个 <code>YAML</code> 文件,用于定义和运行多容器 Docker 应用程序。通常命名为 <code>docker-compose.yml</code>,它使用单一的 YAML 文件来定义多个容器的集合,以及它们之间的依赖关系和服务。以下是一份 <code>docker-compose.yml</code> 文件的配置模板,包含了常用配置项和解释:</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">version</span><span class="token punctuation">:</span> <span class="token string">'3'</span> <span class="token comment"># 指定使用的 Docker Compose 文件格式版本,目前推荐使用 3.x 或更高</span>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">name</span><span class="token punctuation">:</span> myapp
</span><span class="code-line"><span class="token key atrule">version</span><span class="token punctuation">:</span> <span class="token string">'3'</span> <span class="token comment"># 已过时</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token key atrule">services</span><span class="token punctuation">:</span> <span class="token comment"># 定义一个或多个服务</span>
</span><span class="code-line"> <span class="token key atrule">service1</span><span class="token punctuation">:</span> <span class="token comment"># 服务名称</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> nginx<span class="token punctuation">:</span>latest <span class="token comment"># 使用的 Docker 镜像,这里是 Nginx 的最新版本</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token comment"># 或者使用构建指令来从 Dockerfile 构建镜像</span>
</span><span class="code-line"> <span class="token key atrule">build</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">context</span><span class="token punctuation">:</span> ./path/to/Dockerfile <span class="token comment"># Dockerfile 所在的目录</span>
</span><span class="code-line"> <span class="token key atrule">dockerfile</span><span class="token punctuation">:</span> Dockerfile<span class="token punctuation">-</span>alternative <span class="token comment"># 可选的 Dockerfile 名称,默认是 Dockerfile</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token comment"># 容器启动时执行的命令,覆盖默认的命令</span>
</span><span class="code-line"> <span class="token key atrule">command</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"nginx"</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"-g"</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"daemon off;"</span> <span class="token comment"># 以数组形式指定,防止 shell 解析</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token key atrule">ports</span><span class="token punctuation">:</span> <span class="token comment"># 容器端口与主机端口映射</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"80:80"</span> <span class="token comment"># 主机 80 端口映射到容器的 80 端口</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token key atrule">volumes</span><span class="token punctuation">:</span> <span class="token comment"># 数据卷挂载</span>
</span><span class="code-line"> <span class="token punctuation">-</span> ./nginx.conf<span class="token punctuation">:</span>/etc/nginx/nginx.conf<span class="token punctuation">:</span>ro <span class="token comment"># 将主机上的 nginx.conf 挂载到容器的 /etc/nginx/nginx.conf只读</span>
</span><span class="code-line"> <span class="token punctuation">-</span> ./nginx.conf<span class="token punctuation">:</span>/etc/nginx/nginx.conf<span class="token punctuation">:</span>ro <span class="token comment"># 将主机上的 nginx.conf </span>
</span><span class="code-line"> <span class="token comment"># 挂载到容器的 /etc/nginx/nginx.conf只读</span>
</span><span class="code-line"> <span class="token punctuation">-</span> ./logs<span class="token punctuation">:</span>/var/log/nginx <span class="token comment"># 将 logs 目录挂载到容器的 /var/log/nginx</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token key atrule">environment</span><span class="token punctuation">:</span> <span class="token comment"># 设置环境变量</span>
</span><span class="code-line"> <span class="token punctuation">-</span> MYSQL_HOST=database <span class="token comment"># 可以引用其他服务,这里假设有一个名为 database 的服务</span>
</span><span class="code-line"> <span class="token punctuation">-</span> MYSQL_PORT=3306
</span><span class="code-line">
</span><span class="code-line"> <span class="token key atrule">depends_on</span><span class="token punctuation">:</span> <span class="token comment"># 服务启动顺序,这里表明 service1 依赖于 database 服务</span>
</span><span class="code-line"> <span class="token punctuation">-</span> database
</span><span class="code-line">
</span><span class="code-line"> <span class="token key atrule">networks</span><span class="token punctuation">:</span> <span class="token comment"># 定义网络</span>
</span><span class="code-line"> <span class="token punctuation">-</span> my_network <span class="token comment"># 参与名为 my_network 的网络</span>
</span><span class="code-line">
@ -303,6 +305,270 @@
<li>如果使用 <code>--env-file</code> 替换了另一个 <code>.env</code>,则您的 <code>.env</code> 文件可以被另一个 <code>.env</code> 文件覆盖。</li>
<li>从 Docker Compose 版本 2.24.0 开始,您可以通过使用 <code>required</code> 字段将 <code>.env</code> 文件设置为可选项。当 <code>required</code> 设置为 <code>false</code><code>.env</code> 文件丢失时Compose 将静默忽略该条目</li>
</ul>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="image"><a aria-hidden="true" tabindex="-1" href="#image"><span class="icon icon-link"></span></a>image</h3><div class="wrap-body">
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">image</span><span class="token punctuation">:</span> redis
</span><span class="code-line"><span class="token key atrule">image</span><span class="token punctuation">:</span> redis<span class="token punctuation">:</span><span class="token number">5</span>
</span><span class="code-line"><span class="token key atrule">image</span><span class="token punctuation">:</span> redis@sha256<span class="token punctuation">:</span>0ed5d5928d473745<span class="token punctuation">...</span>
</span><span class="code-line"><span class="token key atrule">image</span><span class="token punctuation">:</span> library/redis
</span><span class="code-line"><span class="token key atrule">image</span><span class="token punctuation">:</span> docker.io/library/redis
</span><span class="code-line"><span class="token key atrule">image</span><span class="token punctuation">:</span> my_private.registry<span class="token punctuation">:</span>5000/redis
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="ports-端口"><a aria-hidden="true" tabindex="-1" href="#ports-端口"><span class="icon icon-link"></span></a>ports 端口</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2 row-span-2-->
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">ports</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token comment"># 将容器的端口 3000 映射到主机的随机端口</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"3000"</span>
</span><span class="code-line"> <span class="token comment"># 将容器的端口范围从 3000 到 3005 映射到主机的相同端口范围</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"3000-3005"</span>
</span><span class="code-line"> <span class="token comment"># 将容器的端口 8000 映射到主机的端口 8000</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"8000:8000"</span>
</span><span class="code-line"> <span class="token comment"># 将容器的端口范围从 9090 到 9091 映射到主机的端口范围从 8080 到 8081</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"9090-9091:8080-8081"</span>
</span><span class="code-line"> <span class="token comment"># 将容器的端口 22SSH端口映射到主机的端口 49100</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"49100:22"</span>
</span><span class="code-line"> <span class="token comment"># 将容器的端口范围从 8000 到 9000 映射到主机的端口 80</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"8000-9000:80"</span>
</span><span class="code-line"> <span class="token comment"># 将容器的端口 8001 映射到主机的 127.0.0.1 地址的端口 8001</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"127.0.0.1:8001:8001"</span>
</span><span class="code-line"> <span class="token comment"># 将容器的端口范围从 5000 到 5010 映射到主机的 127.0.0.1 地址的相同端口范围</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"127.0.0.1:5000-5010:5000-5010"</span>
</span><span class="code-line"> <span class="token comment"># 将容器的 UDP 端口 6060 映射到主机的端口 6060</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"6060:6060/udp"</span>
</span></code></pre>
<p>暴露容器端口</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="platform-平台"><a aria-hidden="true" tabindex="-1" href="#platform-平台"><span class="icon icon-link"></span></a>platform 平台</h3><div class="wrap-body">
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">platform</span><span class="token punctuation">:</span> darwin
</span><span class="code-line"><span class="token key atrule">platform</span><span class="token punctuation">:</span> windows/amd64
</span><span class="code-line"><span class="token key atrule">platform</span><span class="token punctuation">:</span> linux/arm64/v8
</span></code></pre>
<p>定义了服务容器运行的目标平台。值必须符合 <a href="https://github.com/opencontainers/image-spec/blob/v1.0.2/image-index.md">OCI Image Spec</a> 使用的约定</p>
</div></div></div><div class="wrap h3body-not-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="command"><a aria-hidden="true" tabindex="-1" href="#command"><span class="icon icon-link"></span></a>command</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<p>会覆盖容器镜像声明的默认命令,例如 Dockerfile 的 CMD。</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">command</span><span class="token punctuation">:</span> bundle exec thin <span class="token punctuation">-</span>p 3000
</span></code></pre>
<p>该值也可以是一个列表,其方式类似于 Dockerfile</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">command</span><span class="token punctuation">:</span> <span class="token punctuation">[</span> <span class="token string">"bundle"</span><span class="token punctuation">,</span> <span class="token string">"exec"</span><span class="token punctuation">,</span> <span class="token string">"thin"</span><span class="token punctuation">,</span> <span class="token string">"-p"</span><span class="token punctuation">,</span> <span class="token string">"3000"</span> <span class="token punctuation">]</span>
</span></code></pre>
<p>如果该值为 null则使用映像中的默认命令。如果值为 [](空列表)或 ''(空字符串),则忽略图像声明的默认命令,即覆盖为空。</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="depends_on"><a aria-hidden="true" tabindex="-1" href="#depends_on"><span class="icon icon-link"></span></a>depends_on</h3><div class="wrap-body">
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">services</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">web</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">build</span><span class="token punctuation">:</span> .
</span><span class="code-line"> <span class="token key atrule">depends_on</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> db
</span><span class="code-line"> <span class="token punctuation">-</span> redis
</span><span class="code-line"> <span class="token key atrule">redis</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> redis
</span><span class="code-line"> <span class="token key atrule">db</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> postgres
</span></code></pre>
<p>服务之间的启动和关闭依赖关系。</p>
</div></div></div><div class="wrap h3body-exist col-span-2"><div class="wrap-header h3wrap"><h3 id="volumes"><a aria-hidden="true" tabindex="-1" href="#volumes"><span class="icon icon-link"></span></a>volumes</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<p>下面的示例显示了双服务设置,其中数据库的数据目录作为名为 db-data 的卷与另一个服务共享,以便定期备份。</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">services</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">backend</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> example/database
</span><span class="code-line"> <span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> db<span class="token punctuation">-</span>data<span class="token punctuation">:</span>/etc/data
</span><span class="code-line">
</span><span class="code-line"> <span class="token key atrule">backup</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> backup<span class="token punctuation">-</span>service
</span><span class="code-line"> <span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> db<span class="token punctuation">-</span>data<span class="token punctuation">:</span>/var/lib/backup/data
</span><span class="code-line">
</span><span class="code-line"><span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">db-data</span><span class="token punctuation">:</span>
</span></code></pre>
<p>db-data 卷安装在 <code>/var/lib/backup/data</code><code>/etc/data</code> 容器路径中,分别用于备份和后端。如果卷尚不存在,则运行 <code>docker compose up</code> 会创建该卷。否则,如果在 Compose 外部手动删除现有卷,则会使用并重新创建现有卷。</p>
<h4 id="driver"><a aria-hidden="true" tabindex="-1" href="#driver"><span class="icon icon-link"></span></a>driver</h4>
<p>指定应使用哪个卷驱动程序。如果驱动程序不可用Compose 将返回错误并且不会部署应用程序。</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">db-data</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">driver</span><span class="token punctuation">:</span> foobar
</span></code></pre>
<h4 id="driver_opts"><a aria-hidden="true" tabindex="-1" href="#driver_opts"><span class="icon icon-link"></span></a>driver_opts</h4>
<p>指定一个选项列表,作为键值对传递给此卷的驱动程序。这些选项取决于驾驶员。</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">example</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">driver_opts</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">type</span><span class="token punctuation">:</span> <span class="token string">"nfs"</span>
</span><span class="code-line"> <span class="token key atrule">o</span><span class="token punctuation">:</span> <span class="token string">"addr=10.40.0.199,nolock,soft,rw"</span>
</span><span class="code-line"> <span class="token key atrule">device</span><span class="token punctuation">:</span> <span class="token string">":/docker/example"</span>
</span></code></pre>
<h4 id="external"><a aria-hidden="true" tabindex="-1" href="#external"><span class="icon icon-link"></span></a>external</h4>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">services</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">backend</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> example/database
</span><span class="code-line"> <span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> db<span class="token punctuation">-</span>data<span class="token punctuation">:</span>/etc/data
</span><span class="code-line">
</span><span class="code-line"><span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">db-data</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">external</span><span class="token punctuation">:</span> <span class="token boolean important">true</span>
</span></code></pre>
<p>在示例中Compose 不会尝试创建名为 <code>{project_name}_db-data</code> 的卷,而是查找名为 <code>db-data</code> 的现有卷,并将其挂载到后端服务的容器中。</p>
<h4 id="labels"><a aria-hidden="true" tabindex="-1" href="#labels"><span class="icon icon-link"></span></a>labels</h4>
<p>标签用于将元数据添加到卷中。您可以使用数组或字典。</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">db-data</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">labels</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">com.example.description</span><span class="token punctuation">:</span> <span class="token string">"Database volume"</span>
</span><span class="code-line"> <span class="token key atrule">com.example.department</span><span class="token punctuation">:</span> <span class="token string">"IT/Ops"</span>
</span><span class="code-line"> <span class="token key atrule">com.example.label-with-empty-value</span><span class="token punctuation">:</span> <span class="token string">""</span>
</span></code></pre>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">db-data</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">labels</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"com.demo.description=Database volume"</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"com.demo.department=IT/Ops"</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"com.demo.label-with-empty-value"</span>
</span></code></pre>
<h4 id="name"><a aria-hidden="true" tabindex="-1" href="#name"><span class="icon icon-link"></span></a>name</h4>
<p>设置卷的自定义名称。名称字段可用于引用包含特殊字符的卷。该名称按原样使用,并且不受堆栈名称的限制。</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">db-data</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">name</span><span class="token punctuation">:</span> <span class="token string">"my-app-data"</span>
</span></code></pre>
<p>这使得可以将此查找名称作为 Compose 文件的参数,以便卷的模型 ID 被硬编码,但平台上的实际卷 ID 是在部署期间在运行时设置的。例如,如果 <code>.env</code> 文件中的 <code>DATABASE_VOLUME=my_volume_001</code></p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">db-data</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">name</span><span class="token punctuation">:</span> $<span class="token punctuation">{</span>DATABASE_VOLUME<span class="token punctuation">}</span>
</span></code></pre>
<p>它还可以与外部属性结合使用。这意味着用于在平台上查找实际卷的卷名称与用于在 Compose 文件中引用它的名称分开设置:</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">volumes</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">db-data</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">external</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">name</span><span class="token punctuation">:</span> actual<span class="token punctuation">-</span>name<span class="token punctuation">-</span>of<span class="token punctuation">-</span>volume
</span></code></pre>
</div></div></div><div class="wrap h3body-exist row-span-3"><div class="wrap-header h3wrap"><h3 id="networks"><a aria-hidden="true" tabindex="-1" href="#networks"><span class="icon icon-link"></span></a>networks</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">services</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">some-service</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> some<span class="token punctuation">-</span>network
</span><span class="code-line"> <span class="token punctuation">-</span> other<span class="token punctuation">-</span>network
</span></code></pre>
<h4 id="aliases"><a aria-hidden="true" tabindex="-1" href="#aliases"><span class="icon icon-link"></span></a>aliases</h4>
<p>声明网络上服务的替代主机名。同一网络上的其他容器可以使用服务名称或别名来连接到服务的容器之一</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">services</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">some-service</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">some-network</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">aliases</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> alias1
</span><span class="code-line"> <span class="token punctuation">-</span> alias3
</span><span class="code-line"> <span class="token key atrule">other-network</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">aliases</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> alias2
</span></code></pre>
<p>在以下示例中,服务前端能够通过主机名 <code>backend</code> 或者 <code>back-tier</code> 网络上的数据库来访问 <code>backend</code> 服务。服务 <code>monitoring</code> 能够在 admin 网络上通过主机名 <code>backend</code> 或者 <code>mysql</code> 来访问相同的 <code>backend</code> 服务。</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">services</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">frontend</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> example/webapp
</span><span class="code-line"> <span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> front<span class="token punctuation">-</span>tier
</span><span class="code-line"> <span class="token punctuation">-</span> back<span class="token punctuation">-</span>tier
</span><span class="code-line">
</span><span class="code-line"> <span class="token key atrule">monitoring</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> example/monitoring
</span><span class="code-line"> <span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> admin
</span><span class="code-line">
</span><span class="code-line"> <span class="token key atrule">backend</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> example/backend
</span><span class="code-line"> <span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">back-tier</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">aliases</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> database
</span><span class="code-line"> <span class="token key atrule">admin</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">aliases</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> mysql
</span><span class="code-line">
</span><span class="code-line"><span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">front-tier</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">back-tier</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">admin</span><span class="token punctuation">:</span>
</span></code></pre>
<h4 id="ipv4_address-ipv6_address"><a aria-hidden="true" tabindex="-1" href="#ipv4_address-ipv6_address"><span class="icon icon-link"></span></a>ipv4_address, ipv6_address</h4>
<p>加入网络时为服务容器指定静态IP地址。</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">services</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">frontend</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> example/webapp
</span><span class="code-line"> <span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">front-tier</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">ipv4_address</span><span class="token punctuation">:</span> 172.16.238.10
</span><span class="code-line"> <span class="token key atrule">ipv6_address</span><span class="token punctuation">:</span> 2001<span class="token punctuation">:</span>3984<span class="token punctuation">:</span>3989<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token number">10</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">front-tier</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">ipam</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">driver</span><span class="token punctuation">:</span> default
</span><span class="code-line"> <span class="token key atrule">config</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token key atrule">subnet</span><span class="token punctuation">:</span> <span class="token string">"172.16.238.0/24"</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token key atrule">subnet</span><span class="token punctuation">:</span> <span class="token string">"2001:3984:3989::/64"</span>
</span></code></pre>
<h4 id="link_local_ips"><a aria-hidden="true" tabindex="-1" href="#link_local_ips"><span class="icon icon-link"></span></a>link_local_ips</h4>
<p>指定了链接本地IP的列表。链路本地IP是属于知名子网的特殊IP纯粹由运营商管理通常取决于部署它们的架构。</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">services</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">app</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> busybox
</span><span class="code-line"> <span class="token key atrule">command</span><span class="token punctuation">:</span> top
</span><span class="code-line"> <span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">app_net</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">link_local_ips</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> 57.123.22.11
</span><span class="code-line"> <span class="token punctuation">-</span> 57.123.22.13
</span><span class="code-line"><span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">app_net</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">driver</span><span class="token punctuation">:</span> bridge
</span></code></pre>
<h4 id="mac_address"><a aria-hidden="true" tabindex="-1" href="#mac_address"><span class="icon icon-link"></span></a>mac_address</h4>
<p>设置服务容器连接特定网络时使用的 MAC 地址。</p>
<h4 id="priority-优先级"><a aria-hidden="true" tabindex="-1" href="#priority-优先级"><span class="icon icon-link"></span></a>priority 优先级</h4>
<p>将服务的容器连接到其网络的顺序。如果未指定,默认值为 0。在以下示例中应用服务首先连接到 <code>app_net_1</code>,因为它具有最高优先级。然后它连接到 <code>app_net_3</code>,然后是 <code>app_net_2</code>,后者使用默认优先级值 0。</p>
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">services</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">app</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">image</span><span class="token punctuation">:</span> busybox
</span><span class="code-line"> <span class="token key atrule">command</span><span class="token punctuation">:</span> top
</span><span class="code-line"> <span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">app_net_1</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">priority</span><span class="token punctuation">:</span> <span class="token number">1000</span>
</span><span class="code-line"> <span class="token key atrule">app_net_2</span><span class="token punctuation">:</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token key atrule">app_net_3</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">priority</span><span class="token punctuation">:</span> <span class="token number">100</span>
</span><span class="code-line"><span class="token key atrule">networks</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">app_net_1</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">app_net_2</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">app_net_3</span><span class="token punctuation">:</span>
</span></code></pre>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="expose"><a aria-hidden="true" tabindex="-1" href="#expose"><span class="icon icon-link"></span></a>expose</h3><div class="wrap-body">
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">expose</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"3000"</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"8000"</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"8080-8085/tcp"</span>
</span></code></pre>
<p>定义 Compose 从容器公开的(传入)端口或端口范围。这些端口必须可供链接服务访问,并且不应发布到主机。只能指定内部容器端口。</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="links"><a aria-hidden="true" tabindex="-1" href="#links"><span class="icon icon-link"></span></a>links</h3><div class="wrap-body">
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">web</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token key atrule">links</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> db
</span><span class="code-line"> <span class="token punctuation">-</span> db<span class="token punctuation">:</span>database
</span><span class="code-line"> <span class="token punctuation">-</span> redis
</span></code></pre>
<p>定义到另一个服务中的容器的网络链接。同时指定服务名称和链接别名 (SERVICE:ALIAS),或者仅指定服务名称。</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="pids_limit"><a aria-hidden="true" tabindex="-1" href="#pids_limit"><span class="icon icon-link"></span></a>pids_limit</h3><div class="wrap-body">
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">pids_limit</span><span class="token punctuation">:</span> <span class="token number">10</span>
</span></code></pre>
<p>调整容器的 PID 限制。设置为 -1 以获取无限 PID。</p>
</div></div></div><div class="wrap h3body-not-exist"><div class="wrap-header h3wrap"><h3 id="devices"><a aria-hidden="true" tabindex="-1" href="#devices"><span class="icon icon-link"></span></a>devices</h3><div class="wrap-body">
<pre class="language-yml"><code class="language-yml code-highlight"><span class="code-line"><span class="token key atrule">devices</span><span class="token punctuation">:</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"/dev/ttyUSB0:/dev/ttyUSB0"</span>
</span><span class="code-line"> <span class="token punctuation">-</span> <span class="token string">"/dev/sda:/dev/xvda:rwm"</span>
</span></code></pre>
<p><code>HOST_PATH:CONTAINER_PATH[:CGROUP_PERMISSIONS]</code> 的形式定义已创建容器的设备映射列表。</p>
</div></div></div></div></div></div><script src="https://giscus.app/client.js" data-repo="jaywcjlove/reference" data-repo-id="R_kgDOID2-Mw" data-category="Q&#x26;A" data-category-id="DIC_kwDOID2-M84CS5wo" data-mapping="pathname" data-strict="0" data-reactions-enabled="1" data-emit-metadata="0" data-input-position="bottom" data-theme="dark" data-lang="zh-CN" crossorigin="anonymous" async></script><div class="giscus"></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 <a href="https://wangchujiang.com/#/app" target="_blank">Kenny Wang</a>.</footer></footer><script src="../data.js?v=1.5.3" defer></script><script src="../js/fuse.min.js?v=1.5.3" defer></script><script src="../js/main.js?v=1.5.3" defer></script><div id="mysearch"><div class="mysearch-box"><div class="mysearch-input"><div><svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 18 18">
<path fill="currentColor" d="M17.71,16.29 L14.31,12.9 C15.4069846,11.5024547 16.0022094,9.77665502 16,8 C16,3.581722 12.418278,0 8,0 C3.581722,0 0,3.581722 0,8 C0,12.418278 3.581722,16 8,16 C9.77665502,16.0022094 11.5024547,15.4069846 12.9,14.31 L16.29,17.71 C16.4777666,17.8993127 16.7333625,18.0057983 17,18.0057983 C17.2666375,18.0057983 17.5222334,17.8993127 17.71,17.71 C17.8993127,17.5222334 18.0057983,17.2666375 18.0057983,17 C18.0057983,16.7333625 17.8993127,16.4777666 17.71,16.29 Z M2,8 C2,4.6862915 4.6862915,2 8,2 C11.3137085,2 14,4.6862915 14,8 C14,11.3137085 11.3137085,14 8,14 C4.6862915,14 2,11.3137085 2,8 Z"></path>
</svg><input id="mysearch-input" type="search" placeholder="搜索" autocomplete="off"><div class="mysearch-clear"></div></div><button id="mysearch-close" type="button">搜索</button></div><div class="mysearch-result"><div id="mysearch-menu"></div><div id="mysearch-content"></div></div></div></div></body>

View File

@ -1408,7 +1408,7 @@
<!--rehype:class=home-card home-links-->
<p>如果你有资源,可以很方便<a href="https://github.com/jaywcjlove/reference/issues/102#issue-1451649637">部署 web 版</a>,这非常简单,只需要克隆 <a href="https://github.com/jaywcjlove/reference/tree/gh-pages">gh-pages</a> 分支代码到你的静态服务就可以了,还可以使用 <a href="https://hub.docker.com/r/wcjiang/reference">docker</a> 快捷部署 web 版。</p>
</div></div><div class="h2wrap-body"></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 <a href="https://wangchujiang.com/#/app" target="_blank">Kenny Wang</a>. Updated on 2024/05/11 19:02:19</footer></footer><script src="data.js?v=1.5.3" defer></script><script src="js/fuse.min.js?v=1.5.3" defer></script><script src="js/main.js?v=1.5.3" defer></script><div id="mysearch"><div class="mysearch-box"><div class="mysearch-input"><div><svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 18 18">
</div></div><div class="h2wrap-body"></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 <a href="https://wangchujiang.com/#/app" target="_blank">Kenny Wang</a>. Updated on 2024/05/12 13:16:31</footer></footer><script src="data.js?v=1.5.3" defer></script><script src="js/fuse.min.js?v=1.5.3" defer></script><script src="js/main.js?v=1.5.3" defer></script><div id="mysearch"><div class="mysearch-box"><div class="mysearch-input"><div><svg xmlns="http://www.w3.org/2000/svg" height="1em" width="1em" viewBox="0 0 18 18">
<path fill="currentColor" d="M17.71,16.29 L14.31,12.9 C15.4069846,11.5024547 16.0022094,9.77665502 16,8 C16,3.581722 12.418278,0 8,0 C3.581722,0 0,3.581722 0,8 C0,12.418278 3.581722,16 8,16 C9.77665502,16.0022094 11.5024547,15.4069846 12.9,14.31 L16.29,17.71 C16.4777666,17.8993127 16.7333625,18.0057983 17,18.0057983 C17.2666375,18.0057983 17.5222334,17.8993127 17.71,17.71 C17.8993127,17.5222334 18.0057983,17.2666375 18.0057983,17 C18.0057983,16.7333625 17.8993127,16.4777666 17.71,16.29 Z M2,8 C2,4.6862915 4.6862915,2 8,2 C11.3137085,2 14,4.6862915 14,8 C14,11.3137085 11.3137085,14 8,14 C4.6862915,14 2,11.3137085 2,8 Z"></path>
</svg><input id="mysearch-input" type="search" placeholder="搜索" autocomplete="off"><div class="mysearch-clear"></div></div><button id="mysearch-close" type="button">搜索</button></div><div class="mysearch-result"><div id="mysearch-menu"></div><div id="mysearch-content"></div></div></div></div></body>
</html>