Ignition 8.1.3
I am getting web socket connection errors quite often. It does not look like I am having problems other than the logs being a bit spammed.
Just a note: I am using hostnames within the docker overlay network kttruck1 and goodcloud1 as can be seen below.
Are these containers running stand-alone or through an orchestration layer? It looks like some of the errors are indicating name resolution problems. If a container is removed and recreated, there would be a temporary failure in name resolution on the overlay network.
Also, are these containers on a custom overlay network? (i.e. not the built-in bridge network?). I imagine they are, and in this case, the containers should be using Docker’s embedded DNS (you should see /etc/resolv.conf in the container pointing to 127.0.0.11)… I suppose it is possible that there is some periodic hiccup from that causing the Temporary failure in name resolution.
EDIT: a quick test on my end of stopping the destination container for an outgoing GAN connection shows that you’d get a different error, Name or service not known, in that case.
Yes, as you mentioned these errors shows up every 30-60 minutes. (while the containers are not stopped or anything like that)
For example, this morning when I logged on I had 5 java.net.UnknownHostException: kttruck1: Temporary failure in name resolution
within the last 2 hours.
This is just for one outgoing connection. I will connect 3 more very soon, giving me very messy logs.
Yes, I am using a custom docker swarm overlay network.
Are the services deployed across multiple machines (i.e. is it a multi-node swarm cluster or just single node)? What version of Docker Engine are you running (perhaps output of docker system info)?
I’d like to try a simple reproduction… I’m not aware of any particular issues with the embedded Docker DNS server… You could probably workaround this issue by locking in your IPs on the overlay networks and using the extra_hosts: configuration option… I think this is more of a Docker / Docker Swarm issue though, Ignition may just be the victim of periodic failed DNS lookups.
I’ll do some testing, but I’m curious, any particular reason you’re not actually using Docker Swarm to deploy these (e.g. docker stack deploy ...)? (obviously you’d need some more work in the compose files, namely the deploy: option)
It was my understanding that using docker stack deploy would create a service in any arbitrary worker node. And if this is true, then how can I alias directly to truck1 Ignition installation, which is supposed to be located in “truck1 machine”.
Our Ignition edge “worker” nodes are similar but not equal. Demanding Ignition Designer access by service personell from time to time. So they must be located at the correct machine.
The (initial) reason we use swarm networking here. Is to utilize docker as well as overlay network. Which fits with the rest of our IOT topologi/scheme in other projects.
I guess an very efficient way of updating all swarm nodes would be to do Ignition changes centrally towards a simulator, then pushing this to a git repo. Then to automattically pull them to the correct worker nodes. But this level of programming/scripting might be difficult to maintain for me and our company at the moment.
Docker swarm is a new “platform” for us, and we are happy for any inputs you might have!
@kcollins1 Do you think it would be possible to look on your swarm compose files, and maybe the commands you use to start the containers? They can be started withouth swarm beeing online right? (my edge computers are sometimes in areas without network, which require the HMI to be visible)
If you want to be able to manage your container lifecycle without Swarm due to network instability, perhaps what you’re doing is the best method–I’d just never thought of trying to use Swarm only for the setup/maintenance of overlay networks. There certainly isn’t anything stopping you from adding overlay networks with --attachable for letting stand-alone containers connect and function. That said, you could still add the option to be able to deploy services via Swarm through the use of node labels and the deploy: configuration option and placement constraints. The variable I’m unsure of is what level of control you’d have without a functioning Swarm manager node; after all, that is the point of the “orchestration”… Having those aspects in your compose files shouldn’t affect stand-alone Docker Compose use though (deploy: is ignored with docker-compose, for example) and might make for easier multi-node simulation of your system in a dev cluster.