Node Express App not reachable at 0.0.0.0

The app is not listening on the expected address and will not be reachable by fly-proxy.

I always get this error while running fly deploy.

# .env

PORT = 10000
// index.ts

export const PORT = +process.env.PORT || 10000;
const HOST = "0.0.0.0";

server.listen(PORT, HOST, () => {
  console.log(`[Info] Local access: http://localhost:${PORT}`);
  console.log(`[Info] Network access: http://${HOST}:${PORT}`);
});
// package.json

  "scripts": {
    "postinstall": "npx prisma generate",
    "dev": "npx cross-env NODE_ENV=development tsx watch src/index.ts",
    "start": "node dist/index.cjs",
    "build": "pkgroll",
  },

This gives logs like following during Development & Production:

❯ npm run dev

> server@1.0.0 dev
> npx cross-env NODE_ENV=development tsx watch src/index.ts

[Database] Initializing Prisma Client...
[Startup] Starting server in development mode...
[Startup] Target port: 10000
[Startup] Attempting to listen on 0.0.0.0:10000...
[Info] Local access: http://localhost:10000
[Info] Network access: http://0.0.0.0:10000

or,

❯ npm run start

> server@1.0.0 start
> npx cross-env NODE_ENV=production node dist/index.mjs

[Startup] Starting server in production mode...
[Startup] Target port: 10000
[Success] Server is listening on 0.0.0.0:10000
[Info] Local access: http://localhost:10000

My docker file looks like following -

FROM node:24-slim AS base

LABEL fly_launch_runtime="Node.js"

WORKDIR /app

FROM base AS build

# Install development dependencies as well since we use tsx to run the app
COPY --link package*.json ./

# Copy all Config files
COPY --link .env ./
COPY --link prisma.config.ts ./
COPY --link src/prisma ./src/prisma

RUN npm install

# Copy the rest of the application
COPY --link . .
RUN npm run build

FROM base
COPY --from=build /app /app

# Ensure PORT is set if not provided by environment
ENV PORT=10000
EXPOSE 10000

CMD ["npm", "run", "dev"]

Following is my fly.toml file:

app = 'ebc-server'
primary_region = 'sin'


[build]

[http_service]
  internal_port = 10000
  force_https = true
  auto_stop_machines = true
  auto_start_machines = true
  min_machines_running = 1
  processes = ["app"]

[[vm]]
  memory = "256mb"
  cpus = 1

But at the fly deploy I always get the warning error:

WARNING The app is not listening on the expected address and will not be reachable by fly-proxy.2] Machine 7817215c94d0d8 reached started state
You can fix this by configuring your app to listen on the following addresses:
  - 0.0.0.0:10000
Found these processes inside the machine with open listening sockets:
  PROCESS        | ADDRESSES
-----------------*----------------------------------------
  /.fly/hallpass | [fdaa:39:cf67:a7b:5f8:bfc7:e911:2]:22

& Deployment https://ebc-server.fly.dev/ is not reachable.

The Dashboard “Logs & Errors” shows this error:

08:33:40
> npx cross-env NODE_ENV=development tsx watch src/index.ts
08:35:28
[PC01] instance refused connection. is your app listening on 0.0.0.0:10000? make sure it is not only listening on 127.0.0.1 (hint: look at your startup logs, servers often print the address they are listening on)
08:35:28
[PR03] could not find a good candidate within 2 attempts at load balancing. last error: [PC01] instance refused connection. is your app listening on 0.0.0.0:10000? make sure it is not only listening on 127.0.0.1 (hint: look at your startup logs, servers often print the address they are listening on)
08:35:40
[PC01] instance refused connection. is your app listening on 0.0.0.0:10000? make sure it is not only listening on 127.0.0.1 (hint: look at your startup logs, servers often print the address they are listening on)

I am using fly shared IPs.

❯ fly ips list
VERSION IP                      TYPE                            REGION  CREATED AT
v6      2a09:8280:1::ce:f9e0:0  public ingress (dedicated)      global  49m12s ago
v4      66.241.124.68           public ingress (shared)                 Jan 1 0001 00:00

Why do you run dev