Look at that startup line: it's listening on a1b2c3d4e5f6, not 0.0.0.0. The standalone server.js binds to process.env.HOSTNAME, and in a container HOSTNAME is set to the container's own name. On Fly that resolves to an address the proxy can't reach.
Add this to the Dockerfile, next to PORT:
ENV HOSTNAME="0.0.0.0"The official Next.js Docker example has that line for exactly this reason. Locally it works because Docker's port mapping reaches it anyway.