How to trigger a container restart based on successful update/image change of another container? - eviltoast

Basically have watchtower monitor and update containers whenever new images are released. I’ve recently noticed that with searxng (using redis as db), hosted through nginx proxy manager, will have a steady downtime of about 15mins post update then come back online.

This is extremely frequent for searxng’s case as I have watchtower run every day and my preferred way of running most of my containers is with the latest tag. The way out of this downtime in my experience is a restart of NPM which brings back the searxng service.

I’m looking for a way to automate a restart of the NPM container after a successful update of searxng’s container.

I have checked the docs for watchtower, and the lifecycle hooks (a way to run sh scripts pre/post update) are able to run only from the applied container and not from the host system.

  • chiisana@lemmy.chiisana.net
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 year ago

    Sounds like trying to use a rolled up newspaper to kill a fly. You can do it with janky restarts of your reverse proxy container, which results in down time of all apps, or you’d wait some long period of time for it to detect the change and rewire itself.

    I’d recommend reaching for an electric bug slapper instead. Use something like traefik, where you can allow it to connect to your docker socket (just like watchtower), and automatically wire up the new container’s reverse proxy when it comes back online.

    • gobbling871@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      1
      arrow-down
      1
      ·
      1 year ago

      Sounds like trying to use a rolled up newspaper to kill a fly.

      Isn’t this what tech/sysadmin solutions are all about now? 😆

      You can do it with janky restarts of your reverse proxy container, which results in down time of all apps

      Yet to see if this solution breaks up my other services but it currently fixes the downtime I’ve recently been having with the searxng docker + NPM setup.

      Use something like traefik, where you can allow it to connect to your docker socket (just like watchtower), and automatically wire up the new container’s reverse proxy when it comes back online.

      NPM covers most of my needs plus traefik doesn’t work for me (due to other reasons unrelated to the tech).

      • chiisana@lemmy.chiisana.net
        link
        fedilink
        English
        arrow-up
        1
        ·
        1 year ago

        Yeah. We reach for what works, and sometimes they’re great, other times there may be better solutions. When a reverse proxy container restarts, there will be a brief disconnect/outage of everything it is proxying until it comes back. I think I’m this case there are other solutions available, but I trust you’ve also weighted the pros and cons of your decision. Hope you find the right tool that meets your objectives!

      • ChrislyBear@lemmy.world
        link
        fedilink
        English
        arrow-up
        0
        ·
        1 year ago

        This will do exactly what you want: You have to configure a healthcheck for searnxg that detects when it’s down. Maybe something with curl or whatever.

        As soon as it’s down autoheal will restart the container. Doesn’t matter why it is down (update, dependency not running, …) autoheal will just restart the container.

        • gobbling871@lemmy.worldOP
          link
          fedilink
          English
          arrow-up
          0
          arrow-down
          1
          ·
          1 year ago

          I want to restart the NPM container (when the searxng service goes down) instead of searxng.

          • ChrislyBear@lemmy.world
            link
            fedilink
            English
            arrow-up
            1
            ·
            1 year ago

            Ahhhh… alright, I misunderstood. So either depends_on is your friend or you could implement a rather dirty solution: Write a little script for the NPM healthcheck that also checks if searxng is online. Then use autoheal.

            But that would be my last solution and only if the searxng is very closely depending on the npm container.

            • gobbling871@lemmy.worldOP
              link
              fedilink
              English
              arrow-up
              1
              arrow-down
              1
              ·
              1 year ago

              No worries. I ended up writing a systemd service that restarts the npm container a minute after the watchtower runs. I don’t know why I didn’t think of that earlier but I guess it’s a much simpler solution than using depends_on with npm which hosts a lot of my other services.