node.js - Nodejs (Hapi.js) ve Prisma ile Docker'da ConnectionError


Nodejs uygulamamı bir dockera koymak istiyorum. Npm run build ve start ile dağıttığımda ona istek gönderebiliyorum.
Ama bir docker imajı oluşturduğumda sorunlar yaşıyorum:
Öncelikle Dockerfile'ımda EXPOSE 8080 var. Sonra docker run -p=3000:8080 --env-file .env my-docker-file çalıştırıyorum. Bundan sonra sunucunun http://localhost:3000 üzerinde çalıştığı bilgisi geliyor.
Biliyorum, localhost:3000 sadece docker dosyasında. Ama en azından docker çalışıyor.

Komutu http localhost:3000 (veya tarayıcıyı) kullandığımda, http:error: ConnectionError: ('Connection aborted.', RemoteDisconnected('Uzak uç yanıt vermeden bağlantıyı kapattı')) URL: http://localhost:3000/ adresine GET isteği yaparken oluştu hatasını alıyorum.

Biri neyin yanlış gittiğine dair bir fikri var mı??? Hiçbir fikrim yok.

Beni doğru yönlendiren tüm ipuçları için teşekkürler.

Benim Dockerfile'ım:

## 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

Cevap #1

Bir Dockerfile kullanıyorsanız, önce görüntünüzü oluşturmanız daha iyidir.

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'ınızın bulunduğu konumdan:

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

Cevap #2

IP adresini kontrol ettin mi?

Node projemi ilk Docker'a dağıttığımda, ona erişemedim çünkü Node projem localhost isteklerini dinliyordu. Ancak ağınızı host olarak belirtmezseniz, Docker konteyneriniz alt ağınızda başka bir IP adresine sahip olacaktır.

Node projelerimin dinlediği IP adresini 0.0.0.0 olarak değiştirdim ve bundan sonra Docker konteynerinde çalışan Node projeme bağlanabildim.