<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>更新 on 众诺博客</title>
        <link>https://blog.ganzi.fun/tags/%E6%9B%B4%E6%96%B0/</link>
        <description>Recent content in 更新 on 众诺博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Sun, 20 Apr 2025 08:36:58 +0000</lastBuildDate><atom:link href="https://blog.ganzi.fun/tags/%E6%9B%B4%E6%96%B0/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>自动更新docker容器，适合所有容器</title>
            <link>https://blog.ganzi.fun/watchtower.html</link>
            <pubDate>Sun, 20 Apr 2025 08:36:58 +0000</pubDate>
            <guid>https://blog.ganzi.fun/watchtower.html</guid>
            <description>&lt;h2 id=&#34;前言&#34;&gt;前言&#xA;&lt;/h2&gt;&lt;p&gt;Watchtower 是一个用于自动更新 Docker 容器的开源工具。它会定期检查运行中的容器镜像是否有新版本，如果有新的版本，就会拉取新的镜像并重新启动容器。这个过程是自动化的，无需手动干预，非常适合那些需要持续更新的 Docker 环境。&lt;/p&gt;&#xA;&lt;h2 id=&#34;准备条件&#34;&gt;准备条件&#xA;&lt;/h2&gt;&lt;p&gt;1）一台服务器或者NAS&lt;br&gt;&#xA;我们使用飞牛云NAS和VPS来演示&lt;/p&gt;&#xA;&lt;p&gt;需要vps的可以看下&lt;a class=&#34;link&#34; href=&#34;https://www.lcayun.com/aff/PQCSKOCK&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;vps官网&lt;/a&gt;&lt;br&gt;&#xA;2）本项目使用到的github&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/containrrr/watchtower&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://github.com/containrrr/watchtower&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;①飞牛nas上搭建&#34;&gt;①《飞牛NAS上搭建》&#xA;&lt;/h2&gt;&lt;p&gt;直接在docker新增一个compose项目即可&lt;br&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&lt;br&gt;&#xA;项目名称：&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;docker-compose配置如下&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;启动成功&lt;br&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;&#xA;&lt;p&gt;国内如果无法使用Docker的可以尝试更换Docker镜像仓库&lt;/p&gt;&#xA;&lt;h2 id=&#34;补充docker可用的镜像仓库&#34;&gt;补充docker可用的镜像仓库&#xA;&lt;/h2&gt;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h2 id=&#34;vps上搭建&#34;&gt;《vps上搭建》&#xA;&lt;/h2&gt;&lt;h2 id=&#34;docker环境部署&#34;&gt;Docker环境部署&#xA;&lt;/h2&gt;&lt;p&gt;在vps安装docker和docker-compose&lt;br&gt;&#xA;Docker官方安装文档（英文）&lt;br&gt;&#xA;&lt;a class=&#34;link&#34; href=&#34;https://duan.yyzq.eu.org/docker-001&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://duan.yyzq.eu.org/docker-001&lt;/a&gt;&lt;br&gt;&#xA;Docker-Compose官方安装文档（英文)&lt;br&gt;&#xA;&lt;a class=&#34;link&#34; href=&#34;https://duan.yyzq.eu.org/docker-002&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://duan.yyzq.eu.org/docker-002&lt;/a&gt;&lt;br&gt;&#xA;Centos安装Docker和Docker-compose（中文）&lt;br&gt;&#xA;&lt;a class=&#34;link&#34; href=&#34;https://duan.yyzq.eu.org//03&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://duan.yyzq.eu.org//03&lt;/a&gt;&lt;br&gt;&#xA;Ubuntu安装Docker和Docker-compose（中文）&lt;br&gt;&#xA;&lt;a class=&#34;link&#34; href=&#34;https://duan.yyzq.eu.org//04&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;https://duan.yyzq.eu.org//04&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;推荐直接用一键脚本&lt;/p&gt;&#xA;&lt;h2 id=&#34;docker安装脚本&#34;&gt;docker安装脚本&#xA;&lt;/h2&gt;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h2 id=&#34;docker-compose安装脚本&#34;&gt;docker-compose安装脚本&#xA;&lt;/h2&gt;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h2 id=&#34;创建docker-composeyml文件&#34;&gt;创建docker-compose.yml文件&#xA;&lt;/h2&gt;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h2 id=&#34;执行容器运行命令&#34;&gt;执行容器运行命令&#xA;&lt;/h2&gt;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;正常启动如下所示&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h2 id=&#34;一主要功能&#34;&gt;一、主要功能&#xA;&lt;/h2&gt;&lt;h2 id=&#34;11自动拉取镜像&#34;&gt;1.1自动拉取镜像：&#xA;&lt;/h2&gt;&lt;p&gt;Watchtower 会定期检查镜像的版本，如果发现有新的版本，它会自动拉取更新的镜像。&lt;/p&gt;&#xA;&lt;h2 id=&#34;12自动重启容器&#34;&gt;1.2自动重启容器：&#xA;&lt;/h2&gt;&lt;p&gt;更新镜像后，Watchtower 会自动停止旧容器，并使用新镜像启动一个新容器。这样，容器始终保持最新的镜像版本。&lt;/p&gt;&#xA;&lt;h2 id=&#34;13支持多个容器&#34;&gt;1.3支持多个容器：&#xA;&lt;/h2&gt;&lt;p&gt;你可以将 Watchtower 配置为更新单个容器、多个容器或整个系统上的所有容器。&lt;/p&gt;&#xA;&lt;h2 id=&#34;14轻量级&#34;&gt;1.4轻量级：&#xA;&lt;/h2&gt;&lt;p&gt;Watchtower 作为一个 Docker 容器运行，内存和资源消耗非常低，只需要 docker.sock 的访问权限来与 Docker 引擎交互。&lt;/p&gt;&#xA;&lt;h2 id=&#34;15灵活的配置&#34;&gt;1.5灵活的配置：&#xA;&lt;/h2&gt;&lt;p&gt;通过环境变量，你可以控制 Watchtower 的许多行为，比如更新频率、是否通知、更新特定容器等。&lt;/p&gt;&#xA;&lt;h2 id=&#34;二工作原理&#34;&gt;二、工作原理&#xA;&lt;/h2&gt;&lt;h2 id=&#34;21容器监控&#34;&gt;2.1容器监控：&#xA;&lt;/h2&gt;&lt;p&gt;Watchtower 定期扫描宿主机上的容器，检查它们使用的镜像是否有更新。&lt;/p&gt;&#xA;&lt;h2 id=&#34;22镜像更新&#34;&gt;2.2镜像更新：&#xA;&lt;/h2&gt;&lt;p&gt;如果找到镜像的新版本，Watchtower 会自动拉取该镜像并重新启动容器。&lt;/p&gt;&#xA;&lt;h2 id=&#34;23容器重启&#34;&gt;2.3容器重启：&#xA;&lt;/h2&gt;&lt;p&gt;旧的容器会被停止并移除，新的容器会使用更新后的镜像重新启动。这个过程是无缝的，基本不需要人工干预。&lt;/p&gt;&#xA;&lt;h2 id=&#34;三安装与配置&#34;&gt;三、安装与配置&#xA;&lt;/h2&gt;&lt;p&gt;Watchtower 可以通过 Docker Compose 或直接使用 Docker 命令来启动。最常见的做法是通过 docker-compose.yml 文件来定义 Watchtower 服务。&lt;br&gt;&#xA;一个基本的配置示例：&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;volumes 配置了 /var/run/docker.sock，使 Watchtower 能够与 Docker 引擎进行通信。&lt;br&gt;&#xA;WATCHTOWER_INTERVAL 是设置检查间隔，单位是秒，默认为 24 小时。&lt;br&gt;&#xA;WATCHTOWER_CLEANUP 是自动清理未使用的旧镜像&lt;br&gt;&#xA;restart: always 使得 Watchtower 在容器停止后会自动重启。&lt;/p&gt;&#xA;&lt;h2 id=&#34;四主要配置选项&#34;&gt;四、主要配置选项&#xA;&lt;/h2&gt;&lt;p&gt;WATCHTOWER_INTERVAL：&lt;br&gt;&#xA;控制检查更新的时间间隔，单位是秒。例如，WATCHTOWER_INTERVAL=3600 表示每小时检查一次。&lt;br&gt;&#xA;WATCHTOWER_CLEANUP：如果设置为 true，更新后会自动删除旧的镜像，帮助清理无用的磁盘空间。&lt;br&gt;&#xA;WATCHTOWER_LABEL_ENABLE：启用容器标签过滤，仅更新具有特定标签的容器。&lt;br&gt;&#xA;WATCHTOWER_LABEL_FILTER：通过标签来筛选需要更新的容器，避免更新不必要的容器。&lt;br&gt;&#xA;WATCHTOWER_NOTIFICATION：启用通知功能，支持通过 Slack、邮件等方式发送通知。&lt;br&gt;&#xA;WATCHTOWER_NO_RESTART：如果设置为 true，更新镜像后不会自动重启容器，需要手动操作。&lt;/p&gt;&#xA;&lt;h2 id=&#34;五高级功能&#34;&gt;五、高级功能&#xA;&lt;/h2&gt;&lt;p&gt;5.1通知：Watchtower 支持多种通知方式，包括 Slack、邮件、Webhook 等。你可以在容器更新时接收到通知。&lt;br&gt;&#xA;示例（使用 Slack）：&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;5.2指定容器更新：你可以通过标签来限制 Watchtower 只更新特定的容器，而不是系统中所有容器。&lt;/p&gt;&#xA;&lt;p&gt;示例（只更新 myapp 镜像）：&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;5.3强制更新：即使镜像没有发生变化，Watchtower 也可以强制拉取并更新容器镜像。&lt;/p&gt;&#xA;&lt;p&gt;示例：&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;p&gt;更新指定容器的镜像：通过配置 WATCHTOWER_MONITOR_ONLY 环境变量来指定只更新某些镜像。&lt;/p&gt;&#xA;&lt;p&gt;示例：&lt;/p&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h2 id=&#34;六安全性&#34;&gt;六、安全性&#xA;&lt;/h2&gt;&lt;h2 id=&#34;61访问控制&#34;&gt;6.1访问控制：&#xA;&lt;/h2&gt;&lt;p&gt;Watchtower 需要访问 Docker 的 socket（通过 /var/run/docker.sock），这意味着它需要足够的权限与 Docker 引擎进行交互。确保你信任 Watchtower，并了解它所拥有的权限。&lt;/p&gt;&#xA;&lt;h2 id=&#34;62自动更新风险&#34;&gt;6.2自动更新风险：&#xA;&lt;/h2&gt;&lt;p&gt;自动更新可能会带来一些风险，特别是当新版本的容器镜像包含破坏性变化时。如果你有严格的版本控制或测试要求，可以通过配置只更新特定镜像或标签来避免过于频繁的自动更新。&lt;/p&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&#xA;&lt;/h2&gt;&lt;p&gt;Watchtower 是一个轻量且功能强大的工具，能够帮助 Docker 用户自动化容器的更新过程。它支持定期检查镜像更新、自动拉取新镜像并重启容器，非常适合用于需要自动保持容器镜像最新的场景。通过灵活的配置选项，你可以控制更新频率、通知机制和容器选择等。&lt;br&gt;&#xA;如果你希望让你的 Docker 环境更加自动化，Watchtower 是一个非常有用的工具。&lt;/p&gt;&#xA;&lt;p&gt; &lt;/p&gt;&#xA;&lt;p&gt; &lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
