Error I get when releasing image
2021-04-07T06:30:58.443089+00:00 heroku[web.1]: Starting process with command `node index.js`
2021-04-07T06:31:01.899268+00:00 app[web.1]: Error: Exec format error
I went back to the most simple node.js code that only requires Express. Can not get my head around it what could be wrong.
Setup is as following:
WORKDIR /app
COPY package.json .
RUN npm install
COPY index.js .
CMD ["node", "index.js"]
{
"name": "SigningV2",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1"
}
}
web: npm start
- PORT: 3000
- USE_NPM_INSTALL: TRUE (also tried without, same result)
ps: when running heroku local web, it works
Ok, found a working solution. It's Apple M1 that is breaking this standard setup (again) :(
We need to force the correct platform to be compatible by Heroku. To do this, we are going to use Docker buildx. Note, do not use Heroku:container push because as far as I know, that does not support the forcing of different platforms.
What worked for me is the following sequence:
# replace signingv2 with your own tag
docker buildx build --platform linux/amd64 -t signingv2 .
# make sure to use the name of your Heroku app
docker tag signingv2 registry.heroku.com/signingv2/web
# use docker push to push it to the Heroku registry
docker push registry.heroku.com/signingv2/web
# then use heroku release to activate
heroku container:release web -a signingv2
Hope that Docker for Apple M1 is supported on several platforms soon.
In my case I solved the issue by changing the Dockerfile.
I updated it to pull node image for linux/amd64:
FROM --platform=linux/amd64 node:14.17.0-alpine
Rebuild, push to heroku and it should work fine then.
Jinxvar solution works. I had a different issue after
"message": "no pg_hba.conf entry for host "xxx", user "xxx", database "xxx", SSL off"
If your using Postgres for the DB and get the exit error make sure to include this in your pg config.
"ssl": true,
"extra": {
"ssl": { "rejectUnauthorized": false }
},
This route is probably not safe to run in production though. When it is ready for production change the config above to
"SSL": {
"ca": process.env.<your-SSL-cert-var>,
}