You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
2023-10-30 updateAllContainers() function is wrong
The following [post](https://discord.com/channels/638610460567928832/638610461109256194/1168202784831709324)
appeared on Discord:
```
Hi!
I have been using iotstack for a couple years successfully. Thanks for
this 🙂 Yesterday after doing an "update all containers", I found that
the homeassistant websocket was not installed in node-RED. I tried
removing it in the container options and installing it in node red
afterwards, and then got this error. Can it be true that node-RED is
not up to date anymore? Can I fix this with iotstack menu?
2023-10-29T14:51:12.235Z [err] ERR! notsup Unsupported engine for [email protected]: wanted: {"node":">=14.0.0"} (current: {"node":"12.22.8","npm":"6.14.15"})
```
This is an extract of the relevant function:
```
$ grep -A 16 "def updateAllContainers()" ~/IOTstack/scripts/docker_commands.py | grep -v "print"
def updateAllContainers():
subprocess.call("docker-compose down", shell=True)
subprocess.call("docker-compose pull", shell=True)
subprocess.call("docker-compose build", shell=True)
subprocess.call("docker-compose up -d", shell=True)
input("Process terminated. Press [Enter] to show menu and continue.")
needsRender = 1
return True
```
There are several problems with this command sequence:
1. There is no need to down the stack while downloading images and/or
rebuilding containers is occurring.
2. The `pull` command is correct. It deals with service definitions
containing `image:` clauses, queries DockerHub for updates, and
downloads any more-recent images it finds.
3. The `build` command is incorrect because it simply re-runs
Dockerfiles on top of already-downloaded base images to produce new
local images. In its current form, this command will never query
DockerHub to download a more-recent base image. This command needs
to be expressed as:
```
docker-compose build --no-cache --pull
```
4. The "up" command is correct. When issued, any newly-downloaded
(by the `pull`) or newly-rebuilt (by the `build`) images will be
instantiated as running containers, with a new-for-old container
swaps occurring at the last moment, resulting in negligible downtime.
5. There is also a command missing from the sequence, which is:
```
docker system prune -f
```
That cleans up old local images and build artifacts.
The absence of the `--no-cache --pull` flags from the `build` command
is the direct cause of the problem reported on Discord:
1. The old base image for Node-RED was retained;
2. The Dockerfile was re-run.
3. The Dockerfile run caused updated versions of the add-on nodes to be
downloaded.
4. The `node-red-contrib-home-assistant-websocket` node required
version of Node-RED 14 while only version 12 was available - because
the `build` had not forced an up-to-date base image.
Signed-off-by: Phill Kelley <[email protected]>
0 commit comments