Forum des NAS

Tous les fabricants de NAS réunis sur un forum unique : Asustor, Qnap, Synology...

Les tutoriaux rédigés par les membres
Avatar de l’utilisateur
par EVOTk
#94417
Bonjour,
Voici un tuto, pour ceux qui souhaiterai installer Watchtower en docker sur un NAS Synology.

Nous allons ici utiliser Portainer ou docker-compose, cette solution ne pourra donc ce faire, uniquement sur un NAS ou est possible d'installer Docker.

Le but de ce tuto sera de rendre cette installation facile et accessible a tous, bien que loin d’être un expert de docker/docker-compose, n’hésiter pas à répondre à ce sujet avec vos interrogations, ..
Pour ceux qui sont plus à l'aise avec ce genre d'installation, n'hésiter pas a proposer des améliorations, ou des conseils, ...

Pré-requis :
Avoir installé le paquet Docker
Avoir un accès SSH au Synology*

* Pour faire cette manip, il vous faudra vous connecter en SSH à votre NAS, si vous ne savez pas le faire, vous trouverez ici un tuto explicatif : [Tuto] Acceder à son NAS en lignes de commande.

Image

Watchtower c'est quoi ?
Watchtower est un conteneur qui va surveiller vos conteneurs à la recherche de mise a jour disponible ! Si une mise a jour est disponible, alors Watchtower, arrete le conteneur, récupere la nouvelle image, et re-créé le conteneur avec le nouvelle image.


Sommaire :
1/ Création du conteneur

_____a/ via Portainer
_____b/ via docker-compose

2/ Utilisation
3/ Les notifications

_____a/ via Discord
_____b/ via Gotify



1/ Création du conteneur
Watchtower peut être paramètré de deux façon, soit par defaut il surveille tous les conteneurs SAUF ceux qu'on souhaite exclure, ou alors il ne surveille QUE les conteneurs que l'on souhaite.

Ici, c'est cette deuxième option que j'ai choisi, je souhaite que Watchtower ne mette a jour que les conteneurs auquel je lui aurait autorisé a la faire.

_____b/ via Portainer
Dans Portainer, cliquer sur Stacks, puis Add Staks :
Image

Donner un nom a votre stack, par exemple "watchtower", en en dessous, coller le compose ci dessous :
Image

Code : Tout sélectionner
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:amd64-latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= * 0 * * * *
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      - WATCHTOWER_NOTIFICATIONS_LEVEL=debug
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Ensuite, pour créer le conteneur on clique sur "Deploy the stack"
Image

_____b/ via docker-compose
Nous allons créer un fichier "docker-compose.yml" avec les paramètres du conteneurs.
Celui-ci est a placer dans /volume1/docker/watchtower.

Voici mon fichier "docker-compose.yml" :

Code : Tout sélectionner
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:amd64-latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= * 0 * * * *
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      - WATCHTOWER_NOTIFICATIONS_LEVEL=debug
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Il n'y a normalement aucunes modifications a faire, enregistrer votre fichier sous le nom : docker-compose.yml
Puis charger le fichier sur votre NAS ( chez moi, il se trouve dans /volume1/docker/ )

Ensuite en SSH, je passe en mode administrateur avec la commande :

sudo su -

Le mot de passe admin vous est demandé.

Dans mon dossier /volume1/docker/watchtower, j'ai chargé mon fichier docker-compose.yml. Je vais donc accéder à ce dossier, pour cela je fait :

cd /volume1/docker/watchtower

Ensuite, afin "d’exécuter" mon fichier docker-compose.yml, je tape en ssh :

sudo docker-compose up -d

Le conteneur est créer, puis démarre.

2/ Utilisation
Maintenant que Watchtower est en route, nous allons lui dire quel conteneur il peu mettre à jour.

Pour cela, il faut rajouter le labels "com.centurylinklabs.watchtower.enable=true" aux conteneurs que watchtower doit surveiller.

Un exemple sur mon compose de jellyfin :
A l'origine, il est comme ceci :

Code : Tout sélectionner
version: "3" 

services: 
  jellyfin: 
    image: linuxserver/jellyfin:latest
    container_name: jellyfin
    restart: unless-stopped
    environment:
     - PUID=9999
     - PGID=111
     - TZ=Europe/Paris
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=0
    networks:
      - jellyfin
    ports:
      - 8096:8096
    expose:
      - 8096
    volumes: 
      - /volume1/docker/jellyfin/config:/config 
      - /volume1/docker/jellyfin/cache:/cache

  nginx:
    image: nginxinc/nginx-unprivileged:alpine
    container_name: jellyfin_proxy
    restart: unless-stopped
    networks:
      - jellyfin
    volumes:
      - /volume1/docker/jellyfin/jellyfin_nginx.conf:/etc/nginx/conf.d/default.conf:ro
    ports:
      - "8083:8080"

networks:
  jellyfin:
    external:
      name: jellyfin

Afin que watchtower surveille le conteneur jellyfin, nous allons rajouter le labels, ce qui donne ceci :

Code : Tout sélectionner
version: "3" 

services: 
  jellyfin: 
    image: linuxserver/jellyfin:latest
    container_name: jellyfin
    restart: unless-stopped
    labels:
      - com.centurylinklabs.watchtower.enable=true
    environment:
     - PUID=9999
     - PGID=111
     - TZ=Europe/Paris
    devices:
      - /dev/dri/renderD128:/dev/dri/renderD128
    sysctls:
      - net.ipv6.conf.all.disable_ipv6=0
    networks:
      - jellyfin
    ports:
      - 8096:8096
    expose:
      - 8096
    volumes: 
      - /volume1/docker/jellyfin/config:/config 
      - /volume1/docker/jellyfin/cache:/cache

  nginx:
    image: nginxinc/nginx-unprivileged:alpine
    container_name: jellyfin_proxy
    restart: unless-stopped
    networks:
      - jellyfin
    volumes:
      - /volume1/docker/jellyfin/jellyfin_nginx.conf:/etc/nginx/conf.d/default.conf:ro
    ports:
      - "8083:8080"

networks:
  jellyfin:
    external:
      name: jellyfin

Dans cette exemple, le conteneur jellyfin est surveillé :)


3/ Les notifications
_____a/ Discord
Pour utiliser les notifications Discord, nous allons modifier notre docker-compose afin d'y inclure quelques arguments supplémentaires.

Voici les arguments a inclure :

Code : Tout sélectionner
      - WATCHTOWER_NOTIFICATIONS=slack
      - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=Watchtower
      - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=https://discordapp.com/api/webhooks/

Notre compose prend donc cette forme :

Code : Tout sélectionner
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:amd64-latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= * 0 * * * *
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      - WATCHTOWER_NOTIFICATIONS_LEVEL=debug
      - WATCHTOWER_NOTIFICATIONS=slack
      - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=Watchtower
      - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL=https://discordapp.com/api/webhooks/
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Ici, nous allons devoir modifier la variable WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL par l'url du webhooks que va vous fournir Discord.
A la fin de l'url, il faudra rajouter /slack

Exemple sur votre url est https://discordapp.com/api/webhooks/333 ... xxxxxxxxxx alors il faudra renseigner : https://discordapp.com/api/webhooks/333 ... xxxx/slack

_____b/ Gotify
Pour utiliser les notifications Gotify, nous allons modifier notre docker-compose afin d'y inclure quelques arguments supplémentaires.

Voici les arguments a inclure :

Code : Tout sélectionner
      - WATCHTOWER_NOTIFICATIONS=gotify
      - WATCHTOWER_NOTIFICATION_GOTIFY_URL=https://gotify
      - WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN=xxxxxxxxxxx

Notre compose prend donc cette forme :

Code : Tout sélectionner
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:amd64-latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= * 0 * * * *
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      - WATCHTOWER_NOTIFICATIONS_LEVEL=debug
      - WATCHTOWER_NOTIFICATIONS=gotify
      - WATCHTOWER_NOTIFICATION_GOTIFY_URL=https://gotify
      - WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN=xxxxxxxxxxx
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Ici, nous allons devoir modifier la variable WATCHTOWER_NOTIFICATION_GOTIFY_URL par l'url de votre serveur Gotify et WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN par le "token" que vous aurait créer dans la section "App" de Gotify.


Vous trouverez également sur nas-forum.com un autre tuto sur watchtower par .Shad., avec, entre autre, une explication plus détaillé sur la fréquence de mise à jour.


Source : https://github.com/containrrr/watchtower
Merci @MANDO ( bisous :-* )

15-01-2021 - Correction d'une "coquille"
29-12-2020 - Il semble y avoir un soucis avec l'image récupéré en utilisant le tag d'image "containrrr/watchtower:latest", j'ai donc modifié le tuto afin de préciser l'architecture voulu ( dans notre cas, amd64, ce qui donne : "containrrr/watchtower:amd64-latest"
18-10-2020 - Suppression de la variable "WATCHTOWER_POLL_INTERVAL=21600", elle ne peu pas co-habiter avec "WATCHTOWER_SCHEDULE" il faut donc choisir l'un ou l'autre. Merci @oracle7
05-09-2020 - Explications sur la mise en place des notifications discord et/ou gotify
04-09-2020 - Création du tuto
#98145
bonjour,
merci pour ce tuto
je sollicite votre aide car watchtower me donne une erreur concernant une image non trouvé du coup il met aucun container à jours
j'ai un synology 718+ j'ai suivi ce tuto en docker compose
voici mon journal
merci par avance

watchtower
date stream content
2020-12-26 16:27:57 stderr /go/pkg/mod/github.com/robfig/cron@v0.0.0-20180505203441-b41be1df6967/cron.go:199 +0x76a
2020-12-26 16:27:57 stderr created by github.com/robfig/cron.(*Cron).run
2020-12-26 16:27:57 stderr /go/pkg/mod/github.com/robfig/cron@v0.0.0-20180505203441-b41be1df6967/cron.go:165 +0x59
2020-12-26 16:27:57 stderr github.com/robfig/cron.(*Cron).runWithRecovery(0xc0002f4000, 0xd18f20, 0xc0000ba520)
2020-12-26 16:27:57 stderr /go/pkg/mod/github.com/robfig/cron@v0.0.0-20180505203441-b41be1df6967/cron.go:92 +0x25
2020-12-26 16:27:57 stderr github.com/robfig/cron.FuncJob.Run(0xc0000ba520)
2020-12-26 16:27:57 stderr /home/circleci/repo/cmd/root.go:187 +0xb6
2020-12-26 16:27:57 stderr github.com/containrrr/watchtower/cmd.runUpgradesOnSchedule.func1()
2020-12-26 16:27:57 stderr /home/circleci/repo/cmd/root.go:231 +0xbe
2020-12-26 16:27:57 stderr github.com/containrrr/watchtower/cmd.runUpdatesWithNotifications(0xc00005fa30)
2020-12-26 16:27:57 stderr /home/circleci/repo/internal/actions/update.go:30 +0x18f
2020-12-26 16:27:57 stderr github.com/containrrr/watchtower/internal/actions.Update(0xd2f940, 0xc00000ce60, 0xc00005fa30, 0x1, 0x2540be400, 0x0, 0x0, 0x0)
2020-12-26 16:27:57 stderr /home/circleci/repo/pkg/container/client.go:251 +0x9e
2020-12-26 16:27:57 stderr github.com/containrrr/watchtower/pkg/container.dockerClient.IsContainerStale(0xd373e0, 0xc000414700, 0x101, 0xc000010000, 0xc000499cb0, 0x0, 0xc000309800, 0x0, 0x0)
2020-12-26 16:27:57 stderr /home/circleci/repo/pkg/container/client.go:297 +0x497
2020-12-26 16:27:57 stderr github.com/containrrr/watchtower/pkg/container.dockerClient.PullImage(0xd373e0, 0xc000414700, 0x101, 0xd28820, 0xc0000aa020, 0xc0004a0000, 0xc000499cb0, 0x0, 0x0, 0x0)
2020-12-26 16:27:57 stderr /home/circleci/repo/pkg/registry/digest/digest.go:41 +0x1e4
2020-12-26 16:27:57 stderr github.com/containrrr/watchtower/pkg/registry/digest.CompareDigest(0xd32c00, 0xc00000cb20, 0x0, 0x0, 0x0, 0x0, 0x0)
2020-12-26 16:27:57 stderr /usr/local/go/src/runtime/panic.go:969 +0x1b9
2020-12-26 16:27:57 stderr panic(0xb70500, 0x1122cf0)
2020-12-26 16:27:57 stderr /go/pkg/mod/github.com/robfig/cron@v0.0.0-20180505203441-b41be1df6967/cron.go:161 +0x9e
2020-12-26 16:27:57 stderr github.com/robfig/cron.(*Cron).runWithRecovery.func1(0xc0002f4000)
2020-12-26 16:27:57 stderr goroutine 14 [running]:
2020-12-26 16:27:57 stderr 2020/12/26 17:27:57 cron: panic running job: runtime error: invalid memory address or nil pointer dereference
2020-12-26 16:27:55 stderr time="2020-12-26T17:27:55+01:00" level=info msg="Found new linuxserver/jackett:latest image (sha256:c0133e0e5fba63d984ab02bfed9e8e51ca4507fff19432f054e24a989032358a)"
2020-12-26 16:27:53 stderr time="2020-12-26T17:27:53+01:00" level=info msg="Found new linuxserver/plex:latest image (sha256:cef293def7ba464628289460cb7f89cdcf3d05eb9dbf4ca02181759af31444fe)"
2020-12-26 16:27:51 stderr time="2020-12-26T17:27:51+01:00" level=info msg="Found new linuxserver/sonarr:latest image (sha256:87b70a910afe4f97355773a833987e549d10e335a1d2b089a3681934e2d2222b)"
2020-12-26 16:27:48 stderr time="2020-12-26T17:27:48+01:00" level=info msg="Found new linuxserver/radarr:latest image (sha256:84a053f18be0ab3cb933446aef5ed9468e5b885dbdf93cf76ad105b0c0b7132d)"
2020-12-26 16:27:45 stderr time="2020-12-26T17:27:45+01:00" level=info msg="Found new linuxserver/radarr:latest image (sha256:84a053f18be0ab3cb933446aef5ed9468e5b885dbdf93cf76ad105b0c0b7132d)"
2020-12-26 16:27:41 stderr time="2020-12-26T17:27:41+01:00" level=warning msg="Failed to retrieve container image info: Error: No such image: sha256:0b3d59352da9b36915160968bff82b9d0ff45435110b18f5f3862a92047d4862"
2020-12-26 16:22:41 stderr time="2020-12-26T17:22:41+01:00" level=info msg="Starting Watchtower and scheduling first run: 2020-12-26 17:27:41 +0100 CET m=+300.270602752"
2020-12-26 16:22:41 stderr time="2020-12-26T17:22:41+01:00" level=warning msg="Failed to retrieve container image info: Error: No such image: sha256:0b3d59352da9b36915160968bff82b9d0ff45435110b18f5f3862a92047d4862"
Avatar de l’utilisateur
par EVOTk
#98168
Salut,
Tres surpennant, ta version de docker est bien a jour ?

Quele méthode a tu suivi pour la création de wathtower ? Portainer ou docker-compose ?
#98171
merci pour ta réponse
je l'ai installer avec docker compose en utilisant la dernière version jai tout tenté mai je ne comprends pas
j'ai meme tenter avec cette commande mais il me marque a chaque fois Failed to retrieve container image info: Error: No such image: sha256:0b3d59352da9b36915160968bff82b9d0ff45435110b18f5f3862a92047d4862"
j'ai essayé avec container aussi le meme resultat cela fait une semaine que je m'acharne la dessus mais en vain
Avatar de l’utilisateur
par EVOTk
#98219
J'ai a mon tour cette erreur, je pense qu'elle viens d'une MAJ de Watchtower, je vais faire des tests.
Avatar de l’utilisateur
par EVOTk
#98220
chahba2054 a écrit : 27 déc. 2020 20:06 cette ligne de commande
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower

Salut,
Il semblerai que docker ne récupère pas la bonne image, j'ai donc modifié mon tuto afin de lui préciser l'architecture de l'image a récupéré ! Cela devrai résoudre ton problème je pense.


Note :

29-12-2020 - Il semble y avoir un soucis avec l'image récupéré en utilisant le tag d'image "containrrr/watchtower:latest", j'ai donc modifié le tuto afin de préciser l'architecture voulu ( dans notre cas, amd64, ce qui donne : "containrrr/watchtower:amd64-latest"

Merci cutedrake pour cette réponse argument[…]

Ok merci beaucoup pour les infos, je suis encore[…]

Bonjour à tous, J'ai vu plusieurs posts re[…]

bonjour; alors ce matin tout a l'air de refonctio[…]

Site hébergé sur un serveur IKOULA

Ikoula