Synology [Tuto] Installation de Watchtower en Docker un NAS Synology

EVOTk

Modérateur
Membre du personnel
Informations: Ce tutoriel n'est plus maintenu.
Vous pouvez toujours consulter : [Tuto] Installation de Watchtower en Docker

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.

Note : Cette installation n'est pas possible via Docker DSM, car Watchtower demande l'acces au sock Docker.

46zhaP9.png


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 :
SppGNaj.png


Donner un nom a votre stack, par exemple "watchtower", en en dessous, coller le compose ci dessous :
1MiP0nW.png


Code:
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:amd64-latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= 0 0 6 * * *
      - 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"
jrel076.png


_____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:
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:amd64-latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= 0 0 6 * * *
      - 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 :

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:
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:
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:
      - 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:
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:amd64-latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= 0 0 6 * * *
      - 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 alors il faudra renseigner :
_____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:
      - WATCHTOWER_NOTIFICATIONS=gotify
      - WATCHTOWER_NOTIFICATION_GOTIFY_URL=https://gotify
      - WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN=xxxxxxxxxxx

Notre compose prend donc cette forme :
Code:
version: "2.3"
services:
  watchtower:
    container_name: watchtower
    image: containrrr/watchtower:amd64-latest
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - WATCHTOWER_SCHEDULE= 0 0 6 * * *
      - 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 : Merci @MANDO ( bisous :-* )

24-05-2021 - Changement du cron pour 0 0 6 * * * ( Tous les jours a 6h du matin )
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
 
Dernière édition:

webmail

Modérateur
Membre du personnel
OMG EVOTk, je le dis à chaque fois mais tu me fais toujours découvrir des trucs que je ne connaissais pas !
va vraiment falloir que je le teste celui la
 

chahba2054

Apprenti
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"
 

EVOTk

Modérateur
Membre du personnel
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 ?
 

chahba2054

Apprenti
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
 

EVOTk

Modérateur
Membre du personnel
J'ai a mon tour cette erreur, je pense qu'elle viens d'une MAJ de Watchtower, je vais faire des tests.
 

EVOTk

Modérateur
Membre du personnel
chahba2054 a dit:
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"
 

chahba2054

Apprenti
j'ai toujour le même probleme avec le .yml modifié
c est etrange

watchtower
date stream content
2020-12-29 20:42:05 stderr /go/pkg/mod/github.com/robfig/cron@v0.0.0-20180505203441-b41be1df6967/cron.go:199 +0x76a
2020-12-29 20:42:05 stderr created by github.com/robfig/cron.(*Cron).run
2020-12-29 20:42:05 stderr /go/pkg/mod/github.com/robfig/cron@v0.0.0-20180505203441-b41be1df6967/cron.go:165 +0x59
2020-12-29 20:42:05 stderr github.com/robfig/cron.(*Cron).runWithRecovery(0xc0000722d0, 0xd18f20, 0xc0004f9ba0)
2020-12-29 20:42:05 stderr /go/pkg/mod/github.com/robfig/cron@v0.0.0-20180505203441-b41be1df6967/cron.go:92 +0x25
2020-12-29 20:42:05 stderr github.com/robfig/cron.FuncJob.Run(0xc0004f9ba0)
2020-12-29 20:42:05 stderr /home/circleci/repo/cmd/root.go:187 +0xb6
2020-12-29 20:42:05 stderr github.com/containrrr/watchtower/cmd.runUpgradesOnSchedule.func1()
2020-12-29 20:42:05 stderr /home/circleci/repo/cmd/root.go:231 +0xbe
2020-12-29 20:42:05 stderr github.com/containrrr/watchtower/cmd.runUpdatesWithNotifications(0xc000389c20)
2020-12-29 20:42:05 stderr /home/circleci/repo/internal/actions/update.go:30 +0x18f
2020-12-29 20:42:05 stderr github.com/containrrr/watchtower/internal/actions.Update(0xd2f940, 0xc000383900, 0xc000389c20, 0x1, 0x2540be400, 0x0, 0x0, 0x0)
2020-12-29 20:42:05 stderr /home/circleci/repo/pkg/container/client.go:251 +0x9e
2020-12-29 20:42:05 stderr github.com/containrrr/watchtower/pkg/container.dockerClient.IsContainerStale(0xd373e0, 0xc000390780, 0x101, 0xc000110000, 0xc00016b1d0, 0x0, 0xc00030b300, 0x0, 0x0)
2020-12-29 20:42:05 stderr /home/circleci/repo/pkg/container/client.go:297 +0x497
2020-12-29 20:42:05 stderr github.com/containrrr/watchtower/pkg/container.dockerClient.PullImage(0xd373e0, 0xc000390780, 0x101, 0xd28820, 0xc0000aa020, 0xc000300000, 0xc00016b1d0, 0x0, 0x0, 0x0)
2020-12-29 20:42:05 stderr /home/circleci/repo/pkg/registry/digest/digest.go:41 +0x1e4
2020-12-29 20:42:05 stderr github.com/containrrr/watchtower/pkg/registry/digest.CompareDigest(0xd32c00, 0xc0006797e0, 0x0, 0x0, 0x0, 0x0, 0x0)
2020-12-29 20:42:05 stderr /usr/local/go/src/runtime/panic.go:969 +0x1b9
2020-12-29 20:42:05 stderr panic(0xb70500, 0x1122cf0)
2020-12-29 20:42:05 stderr /go/pkg/mod/github.com/robfig/cron@v0.0.0-20180505203441-b41be1df6967/cron.go:161 +0x9e
2020-12-29 20:42:05 stderr github.com/robfig/cron.(*Cron).runWithRecovery.func1(0xc0000722d0)
2020-12-29 20:42:05 stderr goroutine 25 [running]:
2020-12-29 20:42:05 stderr 2020/12/29 21:42:05 cron: panic running job: runtime error: invalid memory address or nil pointer dereference
2020-12-29 20:42:03 stderr time="2020-12-29T21:42:03+01:00" level=info msg="Found new linuxserver/jackett:latest image (sha256:deb6529ebe5a67d4a4c2c3fe49c78cfc5b0c9951de4f433f4070d873ec5512d9)"
2020-12-29 20:41:38 stderr time="2020-12-29T21:41:38+01:00" level=info msg="Found new linuxserver/plex:latest image (sha256:cef293def7ba464628289460cb7f89cdcf3d05eb9dbf4ca02181759af31444fe)"
2020-12-29 20:41:35 stderr time="2020-12-29T21:41:35+01:00" level=info msg="Found new linuxserver/sonarr:latest image (sha256:87b70a910afe4f97355773a833987e549d10e335a1d2b089a3681934e2d2222b)"
2020-12-29 20:41:33 stderr time="2020-12-29T21:41:33+01:00" level=info msg="Found new linuxserver/radarr:latest image (sha256:84a053f18be0ab3cb933446aef5ed9468e5b885dbdf93cf76ad105b0c0b7132d)"
2020-12-29 20:41:30 stderr time="2020-12-29T21:41:30+01:00" level=info msg="Found new linuxserver/radarr:latest image (sha256:84a053f18be0ab3cb933446aef5ed9468e5b885dbdf93cf76ad105b0c0b7132d)"
2020-12-29 20:41:23 stderr time="2020-12-29T21:41:23+01:00" level=warning msg="Failed to retrieve container image info: Error: No such image: sha256:0b3d59352da9b36915160968bff82b9d0ff45435110b18f5f3862a92047d4862"
2020-12-29 20:36:23 stderr time="2020-12-29T21:36:23+01:00" level=info msg="Starting Watchtower and scheduling first run: 2020-12-29 21:41:23 +0100 CET m=+300.518685969"
2020-12-29 20:36:23 stderr time="2020-12-29T21:36:23+01:00" level=warning msg="Failed to retrieve container image info: Error: No such image: sha256:0b3d59352da9b36915160968bff82b9d0ff45435110b18f5f3862a92047d4862"
 

chahba2054

Apprenti
le voici

version: "2.3"
services:
watchtower:
container_name: watchtower
image: containrrr/watchtower:amd64-latest
restart: unless-stopped
environment:
- TZ=Europe/Paris
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_REMOVE_VOLUMES=true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 300
 

EVOTk

Modérateur
Membre du personnel
Salut,
Je ne connait pas la variable command ?

Voici comment doit etre ton compose :

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

WATCHTOWER_SCHEDULE= 0 0 6 * * * est égal a une vérification tous les jours a 6h du matin.

Si tu souhaite exécuter cette commande tous les 300s soit 5min, il faut remplacer WATCHTOWER_SCHEDULE= 0 0 6 * * * par WATCHTOWER_POLL_INTERVAL=300
Attention avec les temps des vérification, trop de vérification/jour est tu sera limité par dockerhub.

Dans ton compose, et celui que je te propose au dessus, WATCHTOWER_LABEL_ENABLE n'est pas déclarer, et donc par defaut, tous les conteneurs seront surveillé !


https://containrrr.dev/watchtower/container-selection/
https://containrrr.dev/watchtower/arguments/#scheduling
https://containrrr.dev/watchtower/arguments/#poll_interval
 

chahba2054

Apprenti
oui merci je suis au couran de la limitation 100 demande toute les 6H il me semble jai mi 5 min pour pouvoir tester
j'ai modifier le compose mais toujours pareil
oui pour linstant je souhaite qu ilsurveille tout les containers car il ne sont pas en docker compose donc je ne peu pas rajouter le label je crois
maintenant j'ai la meme erreur toute les 5 min


watchtower
date stream content
2020-12-29 21:31:27 stderr time="2020-12-29T22:31:27+01:00" level=warning msg="Failed to retrieve container image info: Error: No such image: sha256:0b3d59352da9b36915160968bff82b9d0ff45435110b18f5f3862a92047d4862"
2020-12-29 21:26:27 stderr time="2020-12-29T22:26:27+01:00" level=warning msg="Failed to retrieve container image info: Error: No such image: sha256:0b3d59352da9b36915160968bff82b9d0ff45435110b18f5f3862a92047d4862"
2020-12-29 21:21:27 stderr time="2020-12-29T22:21:27+01:00" level=warning msg="Failed to retrieve container image info: Error: No such image: sha256:0b3d59352da9b36915160968bff82b9d0ff45435110b18f5f3862a92047d4862"
2020-12-29 21:16:27 stderr time="2020-12-29T22:16:27+01:00" level=info msg="Starting Watchtower and scheduling first run: 2020-12-29 22:21:27 +0100 CET m=+300.300959219"
2020-12-29 21:16:27 stderr time="2020-12-29T22:16:27+01:00" level=warning msg="Failed to retrieve container image info: Error: No such image: sha256:0b3d59352da9b36915160968bff82b9d0ff45435110b18f5f3862a92047d4862"
 

MilesTEG1

Modérateur
Membre du personnel
J'ai eu aussi l'erreur de mon coté il y a quelques temps ;)
L'ajout de la plateforme sur l'image semble avoir réglé le soucis, ou bien c'est une MAJ de watchtower :p

Sinon, voilà mon fichier docker-compose, avec quelques commentaires ^^
Mais surtout avec un fichier de variables d'environnement watchtower.env pour les notifications par email (afin de ne pas avoir les données sensibles dans le docker-compose directement.
Code:
#
# Doc de Watchtower : https://containrrr.dev/watchtower/
#
---
version: "2.1"
services:
  watchtower:
    image: containrrr/watchtower:amd64-latest
    container_name: watchtower
    network_mode: bridge
    environment:
      - WATCHTOWER_NOTIFICATIONS=email
      - WATCHTOWER_NOTIFICATIONS_LEVEL=debug
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_REMOVE_VOLUMES=true
      - WATCHTOWER_DEBUG=true
      - WATCHTOWER_LABEL_ENABLE=true
      - WATCHTOWER_TIMEOUT=30s
      # Utiliser soit SCHEDULE soit INTERVAL (ce dernier en sec)
      # Pour SCHEDULE : https://crontab.guru/#0_9_*_*_*
      # Ajouter un 0 en premier pour les secondes : secondes | minutes | heures | jour du mois | mois | jour de la semaine
      - WATCHTOWER_SCHEDULE=0 0 20 * * *
      #- WATCHTOWER_POLL_INTERVAL=3000
      - TZ=Europe/Paris
    env_file:
      - /volume1/docker/watchtower/watchtower.env
    labels:
      - "com.centurylinklabs.watchtower.enable=true"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

Voilà le fichier watchtower.env :
Code:
WATCHTOWER_NOTIFICATION_EMAIL_SUBJECTTAG="[ Watchtower-DS920+ ]"
WATCHTOWER_NOTIFICATION_EMAIL_FROM=email@provider.com
WATCHTOWER_NOTIFICATION_EMAIL_TO=email@provider.com
WATCHTOWER_NOTIFICATION_EMAIL_SERVER=smtp.provider.com
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=login_pour_provider
WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=password_a_changer
WATCHTOWER_NOTIFICATION_EMAIL_DELAY=2

Du coup, quand watchtower s'exécute, et trouve des MAJ, j'ai un retour en email.
Par contre, cette méthode avec le .env ne fonctionne pas avec Portainer (ou alors je ne sais pas du tout comment faire...), il faut passer par la CLI, et faire un docker-compose up -d.
 

EVOTk

Modérateur
Membre du personnel
Oui je te confirme que Portainer ne gère pas les .env
D'ailleurs Portainer ne gère pas beaucoup de chose et c'est bien dommage, il me sert d'interface pour superviser les conteneurs, démarrage, redemarrage, vu des logs,. .. mais pour la création de conteneur mieux vaut être en docker-compose
 

MilesTEG1

Modérateur
Membre du personnel
EVOTk a dit:
Oui je te confirme que Portainer ne gère pas les .env
D'ailleurs Portainer ne gère pas beaucoup de chose et c'est bien dommage, il me sert d'interface pour superviser les conteneurs, démarrage, redemarrage, vu des logs,. .. mais pour la création de conteneur mieux vaut être en docker-compose
Je préfère passer par Portainer pour créer mes conteneurs, mais j'ai eu des fois des soucis avec certains...
Et comme tu dis, pas de .env possible... c'est pourtant une demande faite depuis un moment sur leur github.
A chaque conteneur que je fais sur Portainer, je fais aussi un fichier docker-compose.yml que je place dans le dossier du conteneur. Des fois que ça me serve si je passe en CLI.
 

EVOTk

Modérateur
Membre du personnel
J'avoue que c'est agréable par portainer, mais j'ai arrêté car j'avais des soucis.

Certaines commande ne sont pas prise en compte, ou partiellement, avec erreur et parfois sans...

En dernier c'etait la commande net_admin, portainer l'accepte mais ne la gère pas bien, et donc le conteneur ne s'execute pas correctement, un bon moment de perdu avant de comprendre qu'il fallait tout simplement passer en CLI
 

chahba2054

Apprenti
j'ai redémarré mon nas en espérant que ca allai resoudre le probleme mais toujour la meme erreur image non trouvé je sais vraimant plus quoi faire
 
Haut Bas