node.js - שגיאת חיבור ב-Docker עם Nodejs (Hapi.js) ו-Prisma


אני רוצה להכניס את אפליקציית Nodejs שלי לדוקר. בעת פריסה שלה באמצעות npm run build ו-start אני יכול לשלוח לה בקשות.
אבל כאשר אני יוצר תמונת דוקר אני נתקל בבעיות:
קודם כל יש לי EXPOSE 8080 בקובץ Dockerfile שלי. לאחר מכן אני מריץ docker run -p=3000:8080 --env-file .env my-docker-file. אחרי זה אני מקבל את המידע שהשרת רץ על http://localhost:3000.
אני יודע ש-localhost:3000 הוא רק בקובץ הדוקר. אבל לפחות הדוקר רץ.

כאשר אני משתמש בפקודה http localhost:3000 (או בדפדפן) אני מקבל http:error: ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) בעת ביצוע בקשת GET ל-URL: http://localhost:3000/.

יש למישהו רעיון מה הולך לא נכון??? אין לי מושג.

תודה על כל הרמזים שמכוונים אותי לכיוון הנכון.

קובץ ה-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

תשובה #1

אם אתה משתמש ב-Dockerfile, עדיף קודם לבנות את התמונה שלך.

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"]

מהמיקום שבו ממוקם הקובץ Dockerfile שלך:

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

תשובה #2

האם בדקת את כתובת ה-IP?

כאשר פרסמתי לראשונה את פרויקט ה-Node שלי ל-Docker, גם אני לא יכולתי לגשת אליו, כי פרויקט ה-Node שלי הקשיב לבקשות ל-localhost. אבל אם אתה לא מגדיר את הרשת שלך כ-host, למיכל Docker שלך יהיה כתובת IP אחרת בתת-הרשת שלך.

שיניתי את כתובת ה-IP שהפרויקטים של Node שלי מאזינים לה ל-0.0.0.0 ואחרי זה יכולתי להתחבר לפרויקט ה-Node שלי שרץ בתוך קונטיינר של Docker.