作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人知道在 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/
我是一名优秀的程序员,十分优秀!