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

Node.js+TypeScript项目Docker构建时.env.example文件未复制至镜像及docker-compose启动报错求助

问题分析与解决方案

看起来你的核心问题是代码在容器的工作目录(/usr/app)下寻找.env.example,但你只把它复制到了dist目录,最终容器的根工作目录下并没有这个文件,另外还有一些配置细节需要调整,我们一步步来解决:

1. 修正Dockerfile,确保.env.example出现在正确位置

你的Dockerfile里在builder阶段把.env.example复制到了./dist,但代码是在当前工作目录(/usr/app)读取这个文件,所以这一步完全没必要。反而应该在最终的运行阶段(stage2)把.env.example从builder镜像复制到容器的工作目录下。

修改后的Dockerfile如下:

# stage 1 building the code
FROM node as builder
WORKDIR /usr/app
COPY package*.json ./
RUN npm install
COPY . .
COPY .env.production .env
RUN npm run build

# stage 2
FROM node
WORKDIR /usr/app
COPY package*.json ./
RUN npm install --production
COPY --from=builder /usr/app/dist ./dist
# 新增:从builder镜像复制.env.example到当前工作目录
COPY --from=builder /usr/app/.env.example ./
COPY ormconfig.docker.json ./ormconfig.json
EXPOSE 4000
CMD node dist/index.js

2. 移除docker-compose中不必要的volume挂载

你的docker-compose.yaml里挂载了./src:/src,但:

  • 你运行的是编译后的dist/index.js,本地的src代码不会被容器使用
  • 这个挂载路径和容器内的工作目录(/usr/app)不匹配,完全是多余的,甚至可能引发路径混淆问题

修改后的docker-compose.yaml:

version: "3.7"
services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
      POSTGRES_DB: postgres
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
  web:
    build:
      context: ./
      dockerfile: ./Dockerfile
    depends_on:
      - db
    ports:
      - "4000:4000"
    # 移除多余的src挂载

3. 额外检查:确保.env.example没有被忽略

确认你的.gitignore(如果有的话)里没有包含.env.example,否则COPY . .在builder阶段不会把这个文件复制到镜像中。如果.gitignore里有这一行,把它删掉或者改成!.env.example来排除这个规则。

验证步骤

  1. 清理之前的镜像和容器:docker-compose down -v --rmi local
  2. 重新构建并启动:docker-compose up --build
  3. 进入web容器验证文件是否存在:docker exec -it <your-web-container-name> ls /usr/app,应该能看到.env.example文件

这样应该就能解决你遇到的“no such file or directory, open '.env.example'”错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:28:12