node.js - Erreur de connexion dans Docker avec Nodejs (Hapi.js) et Prisma


Je voudrais mettre mon application Nodejs dans un Docker. Lors du déploiement via npm run build et start, je peux lui envoyer des requêtes.
Mais lors de la création d'une image Docker, j'ai des problèmes :
Tout d'abord, j'ai un EXPOSE 8080 dans mon Dockerfile. Ensuite, je lance docker run -p=3000:8080 --env-file .env mon-fichier-docker. Après cela, j'obtiens l'information que le serveur fonctionne sur http://localhost:3000.
Je sais que localhost:3000 est uniquement dans le fichier Docker. Mais au moins, le Docker fonctionne.

Lorsque j'utilise la commande http localhost:3000 (ou le navigateur), je reçois http : erreur : ConnectionError : ('Connexion interrompue.', RemoteDisconnected('Le côté distant a fermé la connexion sans réponse')) lors d'une requête GET vers l'URL : http://localhost:3000/.

Quelqu'un a-t-il une idée de ce qui ne va pas ??? Je n'ai aucune idée.

Merci pour tous les indices qui me dirigent dans la bonne direction.

Mon Dockerfile :

## this is the stage one , also know as the build step

FROM node:12.17.0-alpine as builder

WORKDIR /app

COPY package*.json ./
COPY prisma ./prisma/
COPY tsconfig.json .
COPY src ./src/
COPY tests ./tests/

RUN npm install
RUN npx prisma generate

COPY . .

RUN npm run build

## this is stage two , where the app actually runs

FROM node:12.17.0-alpine

COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/dist ./dist

EXPOSE 8080
CMD npm start

Réponse #1

Si vous utilisez un Dockerfile, il vaut mieux d'abord construire votre image.

FROM node:12.17.0-alpine as builder

WORKDIR /app

COPY . .

RUN npm install
RUN npx prisma generate

RUN npm run build

## this is stage two , where the app actually runs

FROM node:12.17.0-alpine

COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
COPY --from=builder /app/dist ./dist

EXPOSE 8080
CMD ["npm","start"]

À partir de l'emplacement où se trouve votre Dockerfile :

docker build -t your-image-name .
docker run -p 3000:8080 --env-file .env your-image-name

Réponse #2

Avez-vous vérifié l'adresse IP ?

Lorsque j'ai déployé mon projet Node sur Docker pour la première fois, je ne pouvais pas y accéder non plus, car mon projet Node écoutait les requêtes sur localhost. Mais si vous ne spécifiez pas votre réseau comme hôte, votre conteneur Docker aura une autre adresse IP dans votre sous-réseau.

J'ai changé l'adresse IP d'écoute de mes projets Node en 0.0.0.0 et après cela, j'ai pu me connecter à mon projet Node s'exécutant dans un conteneur Docker.