自定义Docker容器GitHub Action无法找到/github/workspace下的Node脚本问题排查求助
问题分析与修复方案
你遇到的这个报错核心原因是GitHub Actions 启动Docker容器时会默认覆盖你在Dockerfile中设置的工作目录,导致执行node app.js时找错了路径。
具体原因拆解:
- 你的Dockerfile里设置了
WORKDIR /home/node,并且把Action代码都放到了这个目录下,依赖安装也在这里完成。 - 但GitHub Actions runner在启动容器时,会自动将容器的工作目录设置为
/github/workspace(这个目录挂载的是测试工作流所在仓库的代码,而非你Action仓库的代码)。 - 所以当
CMD ["node", "app.js"]执行时,它会在/github/workspace下寻找app.js,而你的文件实际在/home/node里,自然就出现了找不到模块的错误。
修复方法(两种任选其一即可):
方法一:修改CMD使用绝对路径
直接在Dockerfile里把CMD改成指向文件的绝对路径,这样不管容器工作目录是什么,都能准确定位到脚本:
FROM node:16.13.0-alpine USER node WORKDIR /home/node ADD --chown=node:node . /home/node RUN npm install # 使用绝对路径指定app.js位置 CMD ["node", "/home/node/app.js"]
方法二:在action.yml中指定容器工作目录
在你的action.yml的runs部分添加working-directory字段,强制指定容器启动后的工作目录为你在Dockerfile中设置的/home/node:
name: my-action description: For testing purposes branding: icon: shield color: green inputs: my-input: description: demo required: true runs: using: docker image: Dockerfile # 指定容器内的工作目录 working-directory: /home/node
验证修复
修改后重新发布你的Action,再运行测试工作流,应该就能正常执行,看到Input is: hello的通知了。
内容的提问来源于stack exchange,提问作者Question3r




