ERR_CONNECTION_REFUSED Docker 中的 NextJS 14 应用程序

问题描述 投票:0回答:1

我有几个使用 docker compose 运行的应用程序。 所有应用程序都可以访问,除了我的 NextJS 应用程序在新部署后突然无法访问。

如果我向 http://localhost:8100 发送了一个curl请求,我得到:

curl:(52)服务器的空回复

如果我向 http://localhost:8082 发送了一个curl请求,我会收到实际的页面响应。

这可能是由于我对 nextjs 应用程序所做的更改所致。然而,在开发过程中,一切都运行良好,构建也按预期运行。

NextJS 应用程序似乎已正确部署,我至少在启动 NextJS 容器后得到此输出:

> ▲ Next.js 14.1.0
> - Local: http://localhost:8100
> - Network: http://0.0.0.0:8100
> ✓ Ready in 219ms

docker-compose 文件

version: '3'

services:

  admin:
    image: 'registry.gitlab.com/...react-app:latest'
    container_name: admin
    restart: always
    expose:
      - 8082
    ports:
      - 8082:80
    networks:
      - app-network

  nextjs-app:
    image: 'registry.gitlab.com/...nextjs-14-app:latest'
    container_name: nextjs-app
    restart: always
    expose:
      - 8100
    ports:
      - 8100:80
    networks:
      - app-network
    environment:
      - NODE_ENV=production

networks:
  app-network:
    driver: bridge

Dockerfile

FROM node:18-alpine AS base

FROM base AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app

COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
  if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
  elif [ -f package-lock.json ]; then npm ci; \
  elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
  else echo "Lockfile not found." && exit 1; \
  fi


FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .

ENV NEXT_TELEMETRY_DISABLED 1

RUN npx prisma generate
RUN yarn build


FROM base AS runner
WORKDIR /app

ENV NODE_ENV production
ENV NEXT_TELEMETRY_DISABLED 1

RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs

COPY --from=builder /app/public ./public

RUN mkdir .next
RUN chown nextjs:nodejs .next
RUN chown nextjs:nodejs public

COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static

USER nextjs

EXPOSE 8100

ENV PORT 8100
ENV HOSTNAME "0.0.0.0"

CMD ["node", "server.js"]
docker next.js docker-compose deployment dockerfile
1个回答
0
投票

在 Docker Compose 文件中,您已将 Next.js 应用程序的容器端口

80
映射到主机端口
8100
:

ports:
  - 8100:80

但是,在 Dockerfile 中,您设置了

EXPOSE
和端口
8100
的环境变量:

EXPOSE 8100

ENV PORT 8100

您的应用程序侦听的内部端口应与 Docker Compose

ports
映射中指定的内部端口匹配。如果您的 Next.js 应用程序侦听端口
8100
,则 Docker Compose 文件应反映它:

ports:
  - 8100:8100
© www.soinside.com 2019 - 2024. All rights reserved.