Thanks Jay & Robert. Indeed the swap was missing.
Solution is:
cd /var/discourse
chmod 700 containers # might be redundant, but no harm
./discourse-setup
The setup will recreate the swap and exit.
WARNING: Discourse requires at least 2GB of swap when running with 2GB of RAM
or less. This system does not appear to have sufficient swap space.
Without sufficient swap space, your site may not work properly, and future
upgrades of Discourse may not complete successfully.
Ctrl+C to exit or wait 5 seconds to have a 2GB swapfile created.
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=e0321b22-.....
/swapfile swap swap auto 0 0
vm.swappiness = 10
The configuration file containers/app.yml already exists!
. . . reconfiguring . . .
Saving old file as app.yml.2023-10-03-153852.bak
Stopping existing container in 5 seconds or Control-C to cancel.
Then just do a regular rebuild.