gpt4 book ai didi

docker - 如何在 Docker 中挂载 NextJS 缓存

转载 作者:行者123 更新时间:2023-12-05 05:38:09 29 4
gpt4 key购买 nike

有人知道在 Docker 中挂载 Next 缓存的方法吗?

我认为这会相对简单。我发现 buildkit 具有缓存挂载功能,并尝试将其添加到我的 Dockerfile。

COPY --chown=node:node . /code


RUN --mount=type=cache,target=/code/.next/cache npm run build

但是我发现我不能作为节点写入缓存。

Type error: Could not write file '/code/.next/cache/.tsbuildinfo': EACCES: permission denied, open '/code/.next/cache/.tsbuildinfo'.

显然您需要 root 权限才能使用 buildkit 缓存装载。这是一个问题,因为我无法以 root 身份构建 Next。

我的解决方法是在其他地方创建缓存,然后将文件复制到 .next/cache 或从中复制文件。出于某种原因,cp 命令在 docker 中不起作用(作为节点,你得到一个权限错误,作为 root 你没有错误,但它仍然不起作用。)我最终想出了这个:

# syntax=docker/dockerfile:1.3
FROM node:16.15-alpine3.15 AS nextcache
#create cache and mount it
RUN --mount=type=cache,id=nxt,target=/tmp/cache \
mkdir -p /tmp/cache && chown node:node /tmp/cache

FROM node:16.15-alpine3.15 as builder
USER node

#many lines later

# Build next
COPY --chown=node:node . /code
#copy mounted cache into actual cache
COPY --chown=node:node --from=nextcache /tmp/cache /code/.next/cache

RUN npm run build


FROM builder as nextcachemount
USER root

#update mounted cache
RUN mkdir -p tmp/cache

COPY --from=builder /code/.next/cache /tmp/cache

RUN --mount=type=cache,id=nxt,target=/tmp/cache \
cp -R /code/.next/cache /tmp

我设法在挂载的缓存中存储了一些东西,但我没有注意到任何性能提升。(我正在尝试为 Next 实现这个挂载的缓存以节省每次构建的时间。现在,构建下一步需要 ~ 160 秒,我希望能缩短一点。)

最佳答案

如果您在节点官方图像中使用节点用户,恰好具有 uid=1000 和相同的 gid,我认为您应该在挂载缓存时指定,以便您有权在其上写入:

RUN --mount=type=cache,target=/code/.next/cache,uid=1000,gid=1000 npm run build

关于docker - 如何在 Docker 中挂载 NextJS 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73000312/

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