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

在GitHub Action的Docker镜像中获取工作目录的方案咨询

解决Docker容器中process.cwd()路径异常的方案

方案1:Dockerfile指定工作目录+环境变量

在Dockerfile里明确设置工作目录,同时把这个路径注入为环境变量,代码里优先读取环境变量,兼容回退到process.cwd():

修改后的Dockerfile:

FROM node:20-slim

# 设定容器内的项目工作目录
WORKDIR /app

COPY . .

RUN npm install
RUN npm run build

# 将工作目录设为环境变量,供代码读取
ENV APP_ROOT=/app

ENTRYPOINT ["node", "/app/dist/index.js"]

TypeScript代码中:

const ROOT = process.env.APP_ROOT ?? process.cwd();

这样不管容器在什么环境下启动,APP_ROOT都会指向你预设的容器内项目根目录,彻底避免process.cwd()的不确定性。

方案2:通过__dirname推导项目根目录

完全不依赖外部环境,直接从代码文件本身的路径推导根目录,这是最健壮的方式之一:

假设编译后的index.js位于/app/dist目录,那么可以通过路径解析向上回溯到根目录:

import path from 'path';

// 从dist目录向上跳两级,得到项目根目录
const ROOT = path.resolve(__dirname, '../..');

这种方式不受当前工作目录影响,不管是本地运行还是在GitHub Actions的容器里,都能精准定位到项目根。

方案3:调整GitHub Actions容器的工作目录

如果坚持要用process.cwd(),可以在GitHub Actions的工作流配置里指定容器的工作目录,确保容器启动时的当前路径是项目根:

jobs:
  run-container:
    runs-on: ubuntu-latest
    container:
      image: your-built-image
      working-directory: /app
    steps:
      # 后续执行步骤

不过这种方式依赖CI配置的正确性,一旦配置变更容易出问题,优先级不如前两种。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:48:18