<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://wiki.rtzra.ru/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>RTzRa&#039;s hive - devops:watchtower</title>
        <description>Все работает</description>
        <link>https://wiki.rtzra.ru/</link>
        <lastBuildDate>Sun, 19 Jul 2026 21:16:59 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>https://wiki.rtzra.ru/_media/wiki/logo.png</url>
            <title>RTzRa&#039;s hive</title>
            <link>https://wiki.rtzra.ru/</link>
        </image>
        <item>
            <title>Watchtower: автоматически обновляем докер-контейнеры</title>
            <link>https://wiki.rtzra.ru/devops/watchtower/watchtower-setup</link>
            <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;watchtoweravtomaticheski_obnovljaem_doker-kontejnery&quot;&gt;Watchtower: автоматически обновляем докер-контейнеры&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Сайт: &lt;a href=&quot;https://github.com/containrrr/watchtower&quot; class=&quot;urlextern&quot; title=&quot;https://github.com/containrrr/watchtower&quot; rel=&quot;ugc nofollow&quot;&gt;https://github.com/containrrr/watchtower&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Документация: &lt;a href=&quot;https://containrrr.dev/watchtower/&quot; class=&quot;urlextern&quot; title=&quot;https://containrrr.dev/watchtower/&quot; rel=&quot;ugc nofollow&quot;&gt;https://containrrr.dev/watchtower/&lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Watchtower: \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0434\u043e\u043a\u0435\u0440-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;watchtoweravtomaticheski_obnovljaem_doker-kontejnery&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-219&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;nastrojki&quot;&gt;Настройки&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Watchtower наблюдает за запущенными docker-контейнерами, периодически проверяет обновления версий образов (по умолчанию раз в сутки). Если вышла новая версия контейнера - скачивает ее и перезапускает контейнер. Причем все это можно гибко настраивать под ваши хотелки.
&lt;/p&gt;

&lt;p&gt;
Запуск (Docker):
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;docker run -d \
    --name watchtower \
    --restart=unless-stopped \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower&lt;/pre&gt;

&lt;p&gt;
Запуск (Docker Compose) с настройками:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; уведомления в Telegram&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; запускать каждое воскресенье в 07:45 утра по Москве&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; перезапускать контейнеры по очереди&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; удалять старые образы&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code&quot;&gt;version: &amp;#039;3.3&amp;#039;

services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - &amp;#039;/var/run/docker.sock:/var/run/docker.sock&amp;#039;
    environment:
      - TZ=Europe/Moscow
      - WATCHTOWER_NOTIFICATIONS_HOSTNAME=MyOwnHostName
      - WATCHTOWER_LIFECYCLE_HOOKS=True
      - WATCHTOWER_NOTIFICATIONS=shoutrrr
      - WATCHTOWER_NOTIFICATION_URL=telegram://BOT_TOKEN@telegram/?channels=CHAT_ID
      - WATCHTOWER_DEBUG=false
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_ROLLING_RESTART=true
      - WATCHTOWER_SCHEDULE=0 45 07 * * 0&lt;/pre&gt;

&lt;p&gt;
Однако далеко не всегда требуется жить на последней версии (те самые любимые всеми latest). Поэтому можно настроить исключения, необходимо добавить метку (label): &lt;a href=&quot;https://containrrr.dev/watchtower/container-selection/&quot; class=&quot;urlextern&quot; title=&quot;https://containrrr.dev/watchtower/container-selection/&quot; rel=&quot;ugc nofollow&quot;&gt;https://containrrr.dev/watchtower/container-selection/&lt;/a&gt;
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;LABEL com.centurylinklabs.watchtower.enable=&amp;quot;false&amp;quot;&lt;/pre&gt;

&lt;p&gt;
Или сразу при запуске:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;docker run -d --label=com.centurylinklabs.watchtower.enable=false someimage&lt;/pre&gt;

&lt;p&gt;
При обновлении контейнеров остаются старые версии. Можно, конечно, запускать в кроне что-то вроде 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;docker image prune -f&lt;/pre&gt;

&lt;p&gt;
 но гораздо удобнее указывать флаг 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;--cleanup&lt;/pre&gt;

&lt;p&gt;
Так же зачастую нам требуется однозначно указать время обновления (например ночью, когда нагрузка минимальна), это можно сделать флагом 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;--schedule &amp;quot;0 0 4 * * *&amp;quot;&lt;/pre&gt;

&lt;p&gt;
 в привычном формате cron&amp;#039;а, но состоящем из 6 полей вместо 5 привычных (добавлены секунды), подробнее тут: &lt;a href=&quot;https://pkg.go.dev/github.com/robfig/cron@v1.2.0#hdr-CRON_Expression_Format&quot; class=&quot;urlextern&quot; title=&quot;https://pkg.go.dev/github.com/robfig/cron@v1.2.0#hdr-CRON_Expression_Format&quot; rel=&quot;ugc nofollow&quot;&gt;https://pkg.go.dev/github.com/robfig/cron@v1.2.0#hdr-CRON_Expression_Format&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Еще очень удобен флаг 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;--rolling-restart&lt;/pre&gt;

&lt;p&gt;
 для перезапуска контейнеров по очереди, а не сразу всех.
&lt;/p&gt;

&lt;p&gt;
Так же можно работать с другим Docker-хостом: 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;--host, -H&lt;/pre&gt;

&lt;p&gt;
, указав адрес в виде 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;&amp;quot;tcp://hostname:port&amp;quot;&lt;/pre&gt;

&lt;p&gt;
Еще много полезного можно посмотреть на страничке с документацией (ссылка в самом начале заметки).
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;nastrojki&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;220-3774&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;monitoring&quot;&gt;Мониторинг&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
За всеми такими действиями нужен глаз да глаз, чтобы если что-то пошло не так можно было быстрее понять причину. Для этого можно включить сбор метрик при помощи Prometheus: &lt;a href=&quot;https://containrrr.dev/watchtower/metrics/&quot; class=&quot;urlextern&quot; title=&quot;https://containrrr.dev/watchtower/metrics/&quot; rel=&quot;ugc nofollow&quot;&gt;https://containrrr.dev/watchtower/metrics/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Чтобы заработало, нужно:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Задать &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; token: &lt;pre class=&quot;code&quot;&gt;--http-api-token YOU_TOKEN&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; Включить &lt;abbr title=&quot;Application Programming Interface&quot;&gt;API&lt;/abbr&gt; endpoint: &amp;lt;/code&amp;gt;–http-api-metrics&amp;lt;/code&amp;gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;monitoring&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:10,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;3775-4338&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit4&quot; id=&quot;uvedomlenija&quot;&gt;Уведомления&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Для понимания что происходит при работе - можно использовать уведомления, подробно расписано тут: &lt;a href=&quot;https://containrrr.dev/watchtower/notifications/&quot; class=&quot;urlextern&quot; title=&quot;https://containrrr.dev/watchtower/notifications/&quot; rel=&quot;ugc nofollow&quot;&gt;https://containrrr.dev/watchtower/notifications/&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
Уведомления в Telegram: создаем нашего бота в Telegram и получаем его токен, узнаем id нашего чата и добавляем переменные среды (env) как указано ниже:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;docker run -d \
  --name watchtower \
  --restart=unless-stopped \
  -e WATCHTOWER_LIFECYCLE_HOOKS=1 \
  -e WATCHTOWER_NOTIFICATIONS=shoutrrr \
  -e WATCHTOWER_NOTIFICATION_URL=telegram://BOT_TOKEN@telegram/?channels=CHAT_ID \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0423\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;uvedomlenija&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:11,&amp;quot;secid&amp;quot;:4,&amp;quot;range&amp;quot;:&amp;quot;4339-5175&amp;quot;} --&gt;
&lt;h2 class=&quot;sectionedit5&quot; id=&quot;shablon_dlja_servisa&quot;&gt;Шаблон для сервиса&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;version: &amp;#039;3&amp;#039;

services:
  app-monitored-by-watchtower:
    image: myapps/monitored-by-watchtower
    labels:
      - &amp;quot;com.centurylinklabs.watchtower.enable=true&amp;quot;

  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --cleanup --schedule &amp;quot;00 50 23 * * *&amp;quot; --http-api-update
    environment:
      - WATCHTOWER_HTTP_API_TOKEN=mytoken
    labels:
      - &amp;quot;com.centurylinklabs.watchtower.enable=false&amp;quot;
    ports:
      - 8080:8080&lt;/pre&gt;
&lt;div class=&quot;tags&quot;&gt;&lt;span&gt;
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/docker?do=showtag&amp;amp;tag=docker&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:docker&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; docker&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/image?do=showtag&amp;amp;tag=image&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:image&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; image&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/watchtower?do=showtag&amp;amp;tag=watchtower&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:watchtower&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; watchtower&lt;/a&gt;,
	&lt;a href=&quot;https://wiki.rtzra.ru/tag/obnovlenie?do=showtag&amp;amp;tag=%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5&quot; class=&quot;wikilink1 tag label label-default mx-1&quot; title=&quot;tag:obnovlenie&quot; rel=&quot;tag&quot;&gt;&lt;span class=&quot;iconify&quot;  data-icon=&quot;mdi:tag-text-outline&quot;&gt;&lt;/span&gt; обновление&lt;/a&gt;
&lt;/span&gt;&lt;/div&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;\u0428\u0430\u0431\u043b\u043e\u043d \u0434\u043b\u044f \u0441\u0435\u0440\u0432\u0438\u0441\u0430&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;shablon_dlja_servisa&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:12,&amp;quot;secid&amp;quot;:5,&amp;quot;range&amp;quot;:&amp;quot;5176-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
            <pubDate>Tue, 06 Feb 2024 18:04:29 +0000</pubDate>
        </item>
    </channel>
</rss>
