getwud / wud

WUD (aka What's up Docker?) gets you notified when a new version of your Docker Container is available.
https://getwud.github.io/wud/
MIT License
1.22k stars 39 forks source link

Trigger not being invoked for docker-compose via cron #184

Open t-pohl opened 1 year ago

t-pohl commented 1 year ago

Hey, I'm running WUD via docker-compose against docker-compose with one local watcher and multiple triggers for different compose files. Problem now is that containers are only auto updated if I restart WUD via docker-compose down and docker-compose up -d again but not if the watcher is invoked via cron. I see the invocation of the watcher in the WUD container logs as

wud              | 20:00:00.757  INFO whats-up-docker/watcher.docker.local: Cron started (0 * * * *)
wud              | 20:00:02.893  INFO whats-up-docker/watcher.docker.local: Cron finished (14 containers watched, 0 errors, 3 available updates)

but no update is triggered afterwards (2 of them should be ignored by threshold but 1 should run as it is only a patch upgrade). If I now just reboot WUD the patch upgrade will be performed.

Here my WUD configuration:

version: '3'
services:
  whatsupdocker:
    image: fmartinou/whats-up-docker:5.22.1
    container_name: wud
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      # wud needs all the docker-compose files which it should be able to update 
      # mounted as volumes
      # docker compose trigger can only upate in batch --> all containers in compose will be updated
      - $REPO_DIR/main-server/gitlab/docker-compose.yml:/docker-compose-files/gitlab-docker-compose.yml
      - $REPO_DIR/main-server/gitlab/gitlab-runner/docker-compose.yaml:/docker-compose-files/gitlab-runner-docker-compose.yml
      - $REPO_DIR/main-server/traefik/docker-compose.yml:/docker-compose-files/traefik-docker-compose.yml
      - $REPO_DIR/lizard/docker-compose.yml:/docker-compose-files/lizard-docker-compose.yml
      - $REPO_DIR/main-server/nextcloud/docker-compose.yml:/docker-compose-files/nextcloud-docker-compose.yml
    ports:
      - 3000:3000
    env_file:
      - .wud.env # just contains the password for the custom registry
    environment:
      # general wud configuration
      - "WUD_WATCHER_LOCAL_WATCHBYDEFAULT=true"
      - "WUD_WATCHER_LOCAL_CRON=0 * * * *"
      # registry configuration
      - "WUD_REGISTRY_CUSTOM_URL=..."
      - "WUD_REGISTRY_CUSTOM_LOGIN=gitlab-ci"
      # trigger definitons
      # trigger: GITLAB-UPDATE
      # where the mounted docker-compose file for the trigger resides inside the wud container
      - "WUD_TRIGGER_DOCKERCOMPOSE_GITLAB-UPDATE_FILE=/docker-compose-files/gitlab-docker-compose.yml"
      - "WUD_TRIGGER_DOCKERCOMPOSE_GITLAB-UPDATE_THRESHOLD=patch"
      - "WUD_TRIGGER_DOCKERCOMPOSE_GITLAB-UPDATE_PRUNE=true"
      # trigger: GITLAB-RUNNER-UPDATE
      - "WUD_TRIGGER_DOCKERCOMPOSE_GITLAB-RUNNER-UPDATE_FILE=/docker-compose-files/gitlab-runner-docker-compose.yml"
      - "WUD_TRIGGER_DOCKERCOMPOSE_GITLAB-RUNNER-UPDATE_THRESHOLD=patch"
      - "WUD_TRIGGER_DOCKERCOMPOSE_GITLAB-RUNNER-UPDATE_PRUNE=true"
      # trigger: TRAEFIK-UPDATE
      - "WUD_TRIGGER_DOCKERCOMPOSE_TRAEFIK-UPDATE_FILE=/docker-compose-files/traefik-docker-compose.yml"
      - "WUD_TRIGGER_DOCKERCOMPOSE_TRAEFIK-UPDATE_THRESHOLD=patch"
      - "WUD_TRIGGER_DOCKERCOMPOSE_TRAEFIK-UPDATE_PRUNE=true"
      - "WUD_TRIGGER_DOCKERCOMPOSE_TRAEFIK-UPDATE_ONCE=false"
      # trigger: LIZARD-UPDATE
      - "WUD_TRIGGER_DOCKERCOMPOSE_LIZARD-UPDATE_FILE=/docker-compose-files/lizard-docker-compose.yml"
      - "WUD_TRIGGER_DOCKERCOMPOSE_LIZARD-UPDATE_THRESHOLD=minor"
      - "WUD_TRIGGER_DOCKERCOMPOSE_LIZARD-UPDATE_PRUNE=true"
      # trigger: NEXTCLOUD-UPDATE
      - "WUD_TRIGGER_DOCKERCOMPOSE_NEXTCLOUD-UPDATE_FILE=/docker-compose-files/nextcloud-docker-compose.yml"
      - "WUD_TRIGGER_DOCKERCOMPOSE_NEXTCLOUD-UPDATE_THRESHOLD=minor"
      - "WUD_TRIGGER_DOCKERCOMPOSE_NEXTCLOUD-UPDATE_PRUNE=true"

Am I missing something here?

fmartinou commented 1 year ago

Hi,

Are there any errors in the logs?

Can you please enable DEBUG logs then retry to see if something helpful is printed?

t-pohl commented 1 year ago

Couldn't find any errors In the case I described the logs just end with

wud | 10:52:07.392 DEBUG whats-up-docker/trigger.dockercompose.traefik-update: Run trigger batch

which should then pull the container and update the image but does not. It's the last log.

I debugged a little more and it seems to me that it might be a permission problem on the volume which handles the compose file. If I mount it with permissions 664 I encountered the problem that changes to the compose file on the host (aka swaping the image file) which were made on the host were not reflected inside the container which seems like a problem for wud. Mounting it with 666 (so also +w for all) seems to solve this problem so the files are now in sync.

I do not know if this is really the cause for my problem but I'm going to run the container a little bit longer with these settings + DEBUG logs to see if it fixes the problem. If you have other ideas / want more logs feel free to reach out :D

t-pohl commented 1 year ago

I also noticed that the files inside volume are owned by node. Could it be that the wud processes do not have the permissions to write these files because they run under a different user?

Arthedian commented 8 months ago

@fmartinou I have the same problem. If I specify WUD_WATCHER_LOCAL_CRON, than no check for new versions is done. If I comment out this parameter, than everything is working