LoginSignup
2
1

Next.js + ECS で発生する "Error: getaddrinfo ENOTFOUND" の対応

Last updated at Posted at 2024-01-11

はじめに

Next.js v14 App routerへの移行をしてECSにデプロイした時に、タイトルのエラーが発生しました。
ローカルでDockerビルドして起動した場合は発生しなかったが、ECS上では発生して解決に時間がかかったのでまとめます

問題

エラー内容

⨯ Failed to start server
Error: getaddrinfo ENOTFOUND xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxx
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26) {
  errno: -3008,
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxx'
}

Dockerファイル

# https://blog.tericcabrel.com/create-docker-image-nextjs-application/
# https://pnpm.io/cli/fetch

FROM node:20.10-alpine AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app

RUN npm install -g pnpm@8
COPY pnpm-lock.yaml ./
ADD . ./
RUN pnpm install --frozen-lockfile

FROM node:20.10-alpine AS builder
RUN npm install -g pnpm@8

WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN pnpm build

FROM node:20.10-alpine AS runner
WORKDIR /app
ENV NODE_ENV production

RUN apk add curl \
    && addgroup --system --gid 1001 hogegroup \
    && adduser --system --uid 1001 hogeuser

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

# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=hogeuser:hogegroup /app/.next/standalone ./
COPY --from=builder --chown=hogeuser:hogegroup /app/.next/static ./.next/static

USER hogeuser
EXPOSE 3000
ENV PORT 3000
CMD ["node", "server.js"]

使用ツールバージョン

  • node: 20.10
  • pnpm: 8.12.1
  • Next.js: 14.0.4
  • React: 18.2.0

解決方法

Node.jsのENOTFOUND例外は、DNSエラーのためにドメインへの接続を確立できないときに発生します。一般的には、ホスト値が正しくないか、localhostを127.0.0.1に不適切にマッピングしているか、ドメイン名にタイプミスがある場合に発生します。

今回はhostnameにECSのタスクIDが入ってしまうバグのようです。

以下のように修正したところ起動するようになりました。

# server.js is created by next build from the standalone output
# https://nextjs.org/docs/pages/api-reference/next-config-js/output
- CMD ["node", "server.js"]
+ CMD HOSTNAME="0.0.0.0" node server.js

おわりに

まだ、Next.js App Routerちらほらバグがありそうで辛さありますね。

参考

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1