It's pretty reasonable for projects to require a specific language version. Especially in this case as 16 is still the latest LTS version of Node.js.
EDIT: They even say "Ghost can work with other operating systems, node versions, and databases (particularly those supported by Knex) - but as a small team, we only document and support one narrow stack that we know works really well."
Can't really see how you can fault that.
And I would expect a new major release to run on the latest even version of nodejs. The uneven versions are for development purposes. Version 18 will become the active LTS in a few months.
Can you elaborate on the issue you encountered?
Most issues I've seen in the wild related to docker deployments is due to not specifying a version tag on the docker image, which means docker will pull the image with the `latest` tag. Fast forward a few years, when you need to restart the container, and for some reason you pull the `latest` image again (either accidentally or automatically by your container system), the new version is now too far ahead from your previous system and break spectacularly when run with your existing data. Some apps even attempt to migrate the data, but failed and leave the data in corrupted state so you can't go back to the previous version.
Alas, no, I didn't keep detailed notes at the time (2018) because I was too busy trying to recover my blog from the disaster.
> Fast forward a few years [...] the new version is now too far ahead
It was 6 months after the migration to v1 and 5 months before v2 came out.