Health Check command for docker(1.12) container (Not in Dockerfile!)

Docker Version 1.12,
I got a Dockerfile from Here

FROM nginx:latest

RUN touch /marker

ADD ./check_running.sh /check_running.sh
RUN chmod +x /check_running.sh

HEALTHCHECK --interval=5s --timeout=3s CMD ./check_running.sh

I’m able to roll the updates and health checks with check_running.sh shell script. Here, the check_running.sh script is copied to image, so the launched container has it.

  • Fail to create postgres extensions through bash script
  • Error executing “docker ps --format”. Error: flag provided but not defined: --format
  • Running Qt5 GUI in Docker
  • Downloading all jupyter notebooks
  • For what sort of volume mounting errors will Docker fail silently?
  • Unable to pull my private image from docker hub
  • Now, my question is there any way to Health Check from out side of the container and script also located outside.

    I’m excepting a health check command to get the container performance(Depends on what we wrote in script), IF the container is not performing good it should roll-back to previous version ( Kind of a process that monitors the containers, if it is not good, it should roll-back to previous)

    Thanks

  • Will single docker container scale automatically on Amazon's EC2?
  • How to build and start containers on multiple docker machines
  • RabbitMQ cluster with docker on different servers
  • How to fix insecure-registry error on clients by updating the docker registry server
  • How to run symfony via docker-composer
  • Run a command on a container from inside another one
  • 5 Solutions collect form web for “Health Check command for docker(1.12) container (Not in Dockerfile!)”

    is there any way to Health Check from out side of the container and
    script also located outside.

    Kind of a process that monitors the containers, if it is not good, it should roll-back to previous

    You have several options:

    1. From outside, you run a process inside the container to check its health with docker exec. This could be any sequence of shell commands. If you want to keep your scripts outside of the container, you might use something like cat script.sh | docker exec -it container sh -s.
    2. You check the container health from outside the container, e.g. by looking for a process that should be running inside the container (try to set a security profile and use ps -Zax or try looking for children of the daemon), or you can give each container a specific user ID with --user 12345 and then look for that or e.g. connecting to its services. You’d have to make sure it’s running inside the right container. You can access the containers’ filesystem below /var/lib/docker/devicemapper/mnt/<hash>/rootfs.
    3. You run a HEALTHCHECK inside the container and check its health with docker inspect --format='{{json .State.Health.Status}}' <containername> combined with e.g. a line in the Dockerfile:
      HEALTHCHECK CMD wget -q -s http://google.com to check the container has internet access.

    I’d recommend option 3, because it’s likely to be more compatible with other tools in the future.

    Just got comment from a blog!. He refered Docker documentation HealthCheck section. There is a health check “option” for docker command to “override” the dockerfile defaults. I have not checked yet!. But it seems good for me to get what I want. Will check and update the answer!

    That’s not available with the Dockerfile HEALTHCHECK option, all checks run inside the container. To me, this is a good thing since it avoids potentially untrusted code running directly on the host, and it allows you to include the dependencies for the health check inside your container.

    If you need to monitor your container from outside, you’ll need to use another tool or monitoring application, there are quite a few of them out there.

    You can view the results of the health check by running docker inspect on a container.

    Another approach depending on your application would be to expose a /healthz endpoint that the healthcheck also probes, this way it can be queried externally or internally as needed.

    The Docker inspect command lets you view the output of commands that succeed or fail

    docker inspect --format='{{json .State.Health}}' your-container-name
    
    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.