Skip to content

Commit 511b4a4

Browse files
committed
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]>
1 parent 2cc7488 commit 511b4a4

File tree

1 file changed

+5
-5
lines changed

1 file changed

+5
-5
lines changed

scripts/docker_commands.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,18 +85,18 @@ def pruneVolumes():
8585

8686
def updateAllContainers():
8787
print("Update All Containers:")
88-
print("docker-compose down")
89-
subprocess.call("docker-compose down", shell=True)
90-
print("")
9188
print("docker-compose pull")
9289
subprocess.call("docker-compose pull", shell=True)
9390
print("")
94-
print("docker-compose build")
95-
subprocess.call("docker-compose build", shell=True)
91+
print("docker-compose build --no-cache --pull")
92+
subprocess.call("docker-compose build --no-cache --pull", shell=True)
9693
print("")
9794
print("docker-compose up -d")
9895
subprocess.call("docker-compose up -d", shell=True)
9996
print("")
97+
print("docker system prune -f")
98+
subprocess.call("docker system prune -f", shell=True)
99+
print("")
100100
input("Process terminated. Press [Enter] to show menu and continue.")
101101
needsRender = 1
102102
return True

0 commit comments

Comments
 (0)