You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker化Github Actions报错:找不到node_modules状态文件

解决Docker化GitHub Action运行时找不到node_modules状态文件的问题

核心原因分析

本地构建镜像正常,但GitHub Actions环境中报错,大概率是容器内预先构建的文件被GitHub的工作区挂载覆盖,或者Yarn Berry的环境配置与运行时不匹配导致的。

解决方案

1. 避免工作区挂载覆盖镜像代码

GitHub Actions运行Docker Action时,默认会将调用仓库的工作区挂载到容器的/github/workspace目录。如果你的Action不需要访问调用仓库的文件,需明确指定容器内的工作目录为镜像中预先构建的路径:

修改action.yml,添加working-directory指定镜像内的工作路径:

runs:
  using: 'docker'
  image: 'Dockerfile'
  working-directory: '/usr/src/app' # 与Dockerfile中的WORKDIR保持一致

2. 检查Yarn Berry的nodeLinker配置

Yarn Berry的nodeLinker决定了依赖的管理方式,如果配置为pnp,则不会生成node_modules目录,可能导致代码找不到依赖状态文件:

在项目根目录的.yarnrc.yml中明确设置nodeLinker为node-modules:

nodeLinker: node-modules

重新构建Docker镜像,确保yarn install生成node_modules目录。

3. 强制在容器内指定路径执行命令

如果上述方法无效,可以修改Dockerfile的CMD,强制切换到镜像内的工作目录执行脚本,避免与挂载的工作区混淆:

CMD ["sh", "-c", "cd /usr/src/app && yarn start"]

4. 验证镜像内的文件完整性

在Dockerfile中添加验证命令,确保构建时正确生成了依赖文件:

# 在yarn install后添加
RUN ls -la /usr/src/app/.yarn
RUN ls -la /usr/src/app/node_modules # 如果使用node-modules linker

构建镜像时查看这些命令的输出,确认.yarn缓存目录和node_modules存在。

5. 排查Dockerignore的影响

检查是否存在.dockerignore文件,若其中忽略了.yarn或node_modules相关文件,可能导致构建过程中某些必要文件缺失。确保.dockerignore没有排除以下内容:

# 不要忽略这些文件
!.yarn/cache
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/sdks
!.yarn/versions

额外注意事项

如果你的Action需要输出内容给后续步骤,需在yarn start脚本中使用GitHub Actions的输出格式:

echo "some_output=你的输出内容" >> $GITHUB_OUTPUT

否则后续步骤无法获取到steps.my-id.outputs.some_output的值。

内容的提问来源于stack exchange,提问作者TheTanadu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 13:53:11