micro icon indicating copy to clipboard operation
micro copied to clipboard

v9.4.1 breaks in nodejs12 especially node:12-alpine

Open samarjit opened this issue 1 year ago • 5 comments

I am not able to pin point the problem why it breaks in node:12-alpine image. When I log into the container I do see process listening on port 3000. But curl http://localhost:3000/ishealthy gets stuck and was failing even while running inside the pod using exec. Nginx reports connection refused to this container.

/app # ps
PID   USER     TIME  COMMAND
    1 root      0:00 node /opt/yarn-v1.22.5/bin/yarn.js run prod
   28 root      0:00 /usr/local/bin/node /app/node_modules/.bin/cross-env NODE_ENV=production micro -p 3000 dist/serverIndex.js
   35 root      0:00 /usr/local/bin/node /app/node_modules/.bin/micro -p 3000 dist/serverIndex.js
   42 root      0:00 sh
   50 root      0:00 ps
/app # netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 :::3000                 :::*                    LISTEN
tcp        0      0 ::ffff:192.168.118.138:3000 ::ffff:192.168.110.232:40688 TIME_WAIT
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  3      [ ]         STREAM     CONNECTED     275190742
unix  3      [ ]         STREAM     CONNECTED     275190743

Our fix was to revert to 9.4.0 which works fine. I thought I would post it incase someone else faces this problem. Meanwhile we are trying to upgrade to node16 to see if 9.4.1 works there.


Update: Node 16 also did not work so we are back to 9.4.0

samarjit avatar Aug 02 '22 22:08 samarjit

When you run it locally what kind of errors do you get?

pmbanugo avatar Aug 05 '22 17:08 pmbanugo

This is reproduceable even in local laptop environment docker pull public.ecr.aws/docker/library/node:16.16-alpine docker run -dit

Open a terminal and log into container: docker exec sh

Run inside container npm i [email protected] I took the below examples from documentation.

~ # cat > test.js
module.exports = () => {
console.log('server accepted connection');
'Welcome to Micro';
}

node_modules/.bin/micro test.js

Open another terminal and run curl localhost:3000 it gets stuck, even the console log 'server accepted connection' does not gets printed. . If curl is not installed by default run apk add curl. Some more hint into the issue - If I kill the micro server at this point, then curl says empty response returned from server:

/ # curl http://localhost:3000
curl: (52) Empty reply from server

Another example same symptoms.

~ # cat send.js
const {send} = require('micro')

module.exports = async (req, res) => {
  const statusCode = 400
  const data = { error: 'Custom error message' }

  send(res, statusCode, data)
}

Same thing happens if you run node_modules/.bin/micro send.js.

If you want to compare against 9.4.0 both of the above examples runs fine in 9.4.0. Just run npm i [email protected] and try rest of the steps they all passes.

Note: I ran docker using docker desktop and I have windows 10 machine, but that should not matter.

samarjit avatar Aug 06 '22 04:08 samarjit

I think I found why it isn't working. There was a recent PR that reverted some changes wrongfully, which was was got applied to 9.4.1. You can stick to 9.4.0 or wait until there's a new major release in the coming days/weeks.

It should be resolved in the next 9.5 release.

pmbanugo avatar Aug 09 '22 15:08 pmbanugo

This isn't just alpine related. I've tried micro with Node.js v14, v16 and v18 on macOS. Non of them worked with 9.4.1. Downgrading to 9.4.0 fixes the issue. This even effects simple code examples from the README (module.exports = () => 'Welcome to Micro';) when you use the micro CLI.

electerious avatar Aug 12 '22 08:08 electerious

@electerious As I said in the previous comment, there's an issue with 9.4.1 and I wouldn't recommend using it. Stick to 9.4.0 for the moment 😄

pmbanugo avatar Aug 12 '22 09:08 pmbanugo

I seem to run into the same issue with 9.4.0 with NodeJS v12. Could anyone please share an example of a Dockerfile to ensure I have it right?

Running curl localhost:3000 gets stuck in the pod. Please help.

ranrao avatar Nov 03 '22 20:11 ranrao

Hi @ranrao,

I do not have the exact dockerfile now as I have changed my laptop after I moved to India. But what I remember is that, we use node14 images of alpine linux, and for this experiment I exec'd into the container and ran npm install ***@***.*** version.

On Sat, Nov 5, 2022 at 12:35 AM ranrao @.***> wrote:

@samarjit https://github.com/samarjit could you please share a sample of your Dockerfile please? I seem to have the same issue with v9.4.0.

— Reply to this email directly, view it on GitHub https://github.com/vercel/micro/issues/463#issuecomment-1304413381, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAEUAH5M5DBJCWMNOASEP23WGXW23ANCNFSM55MYTACQ . You are receiving this because you were mentioned.Message ID: @.***>

samarjit avatar Nov 05 '22 06:11 samarjit

The code has been significantly changed with v10. Please reopen or create a new issue with a reproduction is you are still seeing this issue on v10. Thanks!

leerob avatar Nov 25 '22 21:11 leerob