Read the statement by Michael Teeuw here.
ChatGpt developed Module MMM-Dockerstat
-
@mumblebaj {
module: ‘MMM-Dockerstat’,
header: ‘Docker Status’,
position: ‘top_right’,
config: {
host: ‘192.168.1.200’, // IP address of the second Pi running Docker
interval: 600000, //60 seconds
user:‘pi’,
password:‘mypass’,
container: ‘wireguard’, // just added to check
offlineIcon: ‘fa-times-circle’, // Font Awesome icon for offline status
onlineIcon: ‘fa-check-circle’ // Font Awesome icon for online status
}
},
Yes i added the name of the container. It is still not displaying the status. Anyways the idea was for the module to probe and display the status of all containers running in docker. -
@sdetweil said in ChatGpt developed Module MMM-Dockerstat:
@mumblebaj can u see the container names from inside a container?
‘Docker ps’ command list all the containers that are currently running. So i guess the command will execute and should be able to confirm the status with the command
" ‘.exec(sudo docker ps -f name=${payload.container} --format "{{.Names}} {{.Status}}"
)’"This command uses the Docker CLI (Command Line Interface) to list the running Docker containers on a host, filtering the results by the name of the container specified in payload.container. The --format option specifies how to format the output of the docker ps command. In this case, {{.Names}} {{.Status}} is used to output only the names and statuses of the containers that match the specified filter. The output is then captured and processed by the SSH library used in the code.
anyways " work in progress ".
-
@Rags The output from the query does not return a Status of “Online”
See below what it returns.
-
@mumblebaj said in ChatGpt developed Module MMM-Dockerstat:
@Rags The output from the query does not return a Status of “Online”
See below what it returns.
Yes you are right even i got a similar output when the command was run on the second pi directly. So at least we are getting somewhere. Good news.
sudo docker ps -f name=wireguard --format “{{.Names}} {{.Status}}”
wireguard Up 36 hours.
so now i have to figure out a command line to get status of all containers in a table form with name of container and the uptime. -
@Rags but are you running this on the docker host? outside any container?
if u run this from INSIDE the container (where MM is running) , does it work?
as I recall, it does not.
I think the command (on the host) is
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec container_id “docker -ps … rest of parms”
but you will have to use docker command to get the container_id from the name to use in the exec
long time ago, 9 years now, I wrote a whole bunch of scripts to support using docker to deploy and manage a software api testing service…
-
@Rags you can drop the -f name portion which will then list all containers running. Maybe change the query to something like the following which should give you some JSON type object which you can then work with.
docker ps --format '{"ID":"{{ .ID }}", "Image": "{{ .Image }}", "Names":"{{ .Names }}, "Status": {{.Status}}"}'
This will return something like the below:
{"ID":"4c57d2ba3fd8", "Image": "getting-started", "Names":"silly_hodgkin, "Status": Up 44 minutes"}
From this you can then extract the container you want and check the status. What I have seen the query only returns all running containers
-
@mumblebaj but you don’t need to do all that fancy formatting if you are going to extract the info
awk can do that
11e836525b8d jshridha/blueiris "/usr/bin/supervisord" 2 years ago Up 8 months 0.0.0.0:82->81/tcp, :::82->81/tcp, 0.0.0.0:5901->5900/tcp, :::5901->5900/tcp, 0.0.0.0:8280->8080/tcp, :::8280->8080/tcp blueiris (base) sam@sams:~/MagicMirror/config$
docker ps | awk ‘{print $1}’
awk can split a string into parts (using some separator char (-F parm, space is default) and then u can print out just the parm u want
also docker ps -q
only displays the container ids. -
@sdetweil Thanks Sam. I just installed Docker for the first time earlier and also learning. :-) Looks fun though. I was looking jq but can’t get that to work, How do i install jq on Docker? Or get it to work off the command line?
-
@mumblebaj sorry, no idea on jq
i use terminal commands all the time… jq only in nodejs
when I have a terminal command i need output of, I use terminal command tools.
the thing about docker is you can make an image of a ‘thing’ you want to run, and run it everywhere that supports that processor type. independent of OS and you can run multiple instance at the same time (scale up server?) without changing anything inside the image
start up a web server with this content (mapped source folder)
or that content , or both poof a docker command and up you go.getting the folders mapped to the right place for the ‘thing’ in the container takes a little (tiny amount) work
-
@sdetweil said in ChatGpt developed Module MMM-Dockerstat:
@Rags but are you running this on the docker host? outside any container?
if u run this from INSIDE the container (where MM is running) , does it work?
as I recall, it does not.
I think the command (on the host) is
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
docker exec container_id “docker -ps … rest of parms”
but you will have to use docker command to get the container_id from the name to use in the exec
long time ago, 9 years now, I wrote a whole bunch of scripts to support using docker to deploy and manage a software api testing service…
Sorry if i have not been clear. My MagicMirror is in the living room. The MM is running on the first pi( standalone ) not in any container. The second pi in my network is tucked away in my study. This machine is installed with Docker containing multiple containers, which include pihole, wireguard, nginx, apache etc. Occasionally, one or two containers would quit running and I would realise quite late that a particular service is down. That’s why i was trying to build this module so that the status of all containers are known in a jiffy on the MM display.
So when the MM docker module probes the second pi it should just ssh into it and retrieve the docker status easily, format the info in an array and display it. Simple (apparently ).