首页 > 解决方案 > 纱线安装错误“ENOENT:没有这样的文件或目录

问题描述

我有一个Dockerfile,当我在本地运行它时,一切正常,但是我通过 GitHub 操作的构建似乎失败了,我得到的错误是:

error An unexpected error occurred: "ENOENT: no such file or directory, stat '/home/runner/work/akira/akira/README.md'".

我试图删除yarn.lock但没有成功,可以在这里找到失败的构建的完整日志,我Dockerfile的如下:

Dockerfile:

FROM node:14.0.0 AS base
WORKDIR /usr/src/app

FROM base as builder
COPY ./lerna.json .
COPY ./package.json .
COPY ./tsconfig.json .
COPY ./yarn.lock .
COPY ./packages/akira/prisma ./packages/akira/prisma
COPY ./packages/akira/src ./packages/akira/src
COPY ./packages/akira/types ./packages/akira/types
COPY ./packages/akira/package*.json ./packages/akira/
COPY ./packages/akira/tsconfig.json ./packages/akira
RUN yarn install --frozen-lockfile
RUN yarn build

FROM builder as migrate
RUN yarn workspace akira prisma migrate up --experimental

FROM base AS app
COPY --from=builder /usr/src/app/yarn.lock .
COPY --from=builder /usr/src/app/packages/akira/dist ./dist
COPY --from=builder /usr/src/app/packages/akira/prisma ./prisma
COPY --from=builder /usr/src/app/packages/akira/package.json .
RUN yarn install --production
USER node
ENV NODE_ENV=production
EXPOSE 4000
CMD ["node", "dist/index.js"]

标签: dockerdockerfileyarnpkggithub-actions

解决方案


如果您查看您的GitHub Actions 工作流程,或者您链接的失败构建的日志,它似乎是在yarndocker 之外运行命令。

看起来yarn正在与 README 符号链接作斗争,不知道为什么,但看起来你想用 docker 构建,我会尝试以下操作:

替换这部分yaml

- name: Use Node.js
  uses: actions/setup-node@master
  with:
    node-version: 14.4.0

- name: Install dependencies
  run: yarn --frozen-lockfile

- name: Build packages
  run: yarn build

有类似的东西

- name: Build docker image
  run: docker build .

编辑

正如下面的评论所指出的,Dockerfile 包含部署数据库迁移的副作用。

如果您不想在构建管道中运行 Dockerfile 中的所有内容,则可以利用多阶段构建并在特定阶段停止。

即,将迁移移动到它自己的阶段:

FROM node:14.0.0 AS base
WORKDIR /usr/src/app

FROM base as builder
COPY ./lerna.json .
<< lines omitted >>
RUN yarn install --frozen-lockfile
RUN yarn build

FROM builder AS migr
RUN yarn workspace akira prisma migrate up --experimental

FROM base AS app
COPY --from=builder /usr/src/app/yarn.lock .
<< lines omitted >>

然后你可以在builder舞台结束后停下来

docker build --target builder .

编辑 2

或者您可以保持构建管道和 Dockerfile 原样,而是修复损坏的符号链接,即恢复提交0c87fa3


推荐阅读