Me sale error al liberar imagen
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 errorVolví al código node.js más simple que solo requiere Express. No puedo entender lo que podría estar mal.
La configuración es la siguiente:
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)pd: cuando se ejecuta la web local de heroku, funciona
Ok, encontré una solución de trabajo. Es Apple M1 el que está rompiendo esta configuración estándar (otra vez) :(
Necesitamos forzar la plataforma correcta para que sea compatible con Heroku. Para hacer esto, vamos a usar Docker buildx. Tenga en cuenta que no use Heroku: container push porque, hasta donde yo sé, eso no admite el forzado de diferentes plataformas.
Lo que funcionó para mí es la siguiente secuencia:
# 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 signingv2Espero que Docker para Apple M1 sea compatible pronto con varias plataformas.
La solución Jinxvar funciona. Tuve un problema diferente después
"message": "no pg_hba.conf entry for host "xxx", user "xxx", database "xxx", SSL off"Si usa Postgres para la base de datos y obtiene el error de salida, asegúrese de incluir esto en su configuración de pg.
"ssl": true, "extra": { "ssl": { "rejectUnauthorized": false } },Sin embargo, esta ruta probablemente no sea segura para ejecutarse en producción. Cuando esté listo para la producción, cambie la configuración anterior a
"SSL": { "ca": process.env.<your-SSL-cert-var>,}
Modifiqué ligeramente la solución de @Jinxvar porque tenía que usar la opción --load para poder enviar la imagen. De lo contrario, ni siquiera apareció cuando ejecuté docker image ls
Esto es lo que funcionó para mí:
$ docker buildx build --load --platform linux/amd64 -t registry.heroku.com/app_name/web . $ docker push registry.heroku.com/app_name/web:latest