gpt4 book ai didi

node.js - 尝试联系本地 API 端点时,React/Next.js docker 构建失败

转载 作者:行者123 更新时间:2023-12-04 12:33:04 25 4
gpt4 key购买 nike

我似乎无法获得用于构建 react/next.js 的 node:alpine Docker 镜像。
我可以让它在本地构建得很好,但是当 Docker 构建到达 API 端点时,我从未在 API 日志中看到流量,API 端点本身在 Docker 容器(nginx、 headless 工艺 cms 等)中运行。
正如我尝试过的那样,构建似乎根本不喜欢 localhost:
http://localhost:9000/api
...这是我在日志中收到的消息:

#15 13.76 > Build error occurred
#15 13.76 FetchError: request to http://localhost:9000/api failed, reason: connect ECONNREFUSED 127.0.0.1:9000
我听说我可以使用主机名代替“localhost”,所以在我的 MacOS 终端中,我已经输入了“主机名”,并且我已经将 localhost 换成了这个值。这不会完全出错,但构建会卡在构建的“生成页面...”步骤上。
如何让 Docker 构建识别本地主机,或者换句话说,如何将我的 API URL 设置为由本地 Docker 容器托管的端点?
这是我的 Dockerfile:
# Install dependencies only when needed
FROM node:alpine AS deps
RUN apk add --no-cache libc6-compat
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn --frozen-lockfile

# Rebuild the source code only when needed
FROM node:alpine AS builder

WORKDIR /app
COPY . .
COPY --from=deps /app/node_modules ./node_modules
RUN yarn static

# Production image, copy all the files and run next
FROM node:alpine AS runner
WORKDIR /app

ENV NODE_ENV production

RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001

# You only need to copy next.config.js if you are NOT using the default configuration
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next ./.next
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./package.json

USER nextjs

EXPOSE 3000

# Next.js collects completely anonymous telemetry data about general usage.
# Learn more here: https://nextjs.org/telemetry
# Uncomment the following line in case you want to disable telemetry.
# ENV NEXT_TELEMETRY_DISABLED 1

CMD ["yarn", "start"]

最佳答案

好的,我想出了解决方案,或者说是解决方案。
翻来覆去,发现需要连接“桥接网络”。
我通过首先输入“docker network ls”发现了桥接网络 IP 是什么:
enter image description here
这给了我获取 IP 所需的网络名称,我通过键入“docker network inspectcraftcms_default”来完成此操作:
enter image description here
这在我的情况下输出相当多,但我唯一需要的是“网关”IP,这里是 172.19.0.1
我的 nginx 服务器映射为 9000:80,因此 headless 工艺 CMS API 位于:
http://172.19.0.1:9000/api
...然而,作为一个快速的健全性检查,我将其输入到浏览器中,结果是一个不断旋转/加载的页面。我毫不犹豫地将其作为 PUBLIC_NEXT_API_URL 输入到 env.local 中,并且在 Docker 构建期间静态站点生成完成得很好。
我仍在尝试一种优雅的方式来在 Docker 构建中设置这个环境变量,所以如果有人有任何建议,我很想听听!
这是一个有趣的挑战,因为 Docker 构建无法获取托管在另一个本地运行的容器中的 URL,因此我找不到专门针对正在运行的进程的任何答案/谷歌结果。希望这可以帮助其他人在这个问题上苦苦挣扎!

关于node.js - 尝试联系本地 API 端点时,React/Next.js docker 构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67326850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com