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

在Docker容器内无法执行TypeORM迁移生成命令问题求助

问题原因

错误1:docker exec执行报错exec: "typeorm": executable file not found in $PATH

  • docker exec参数顺序错误:-it是docker exec的固有参数,必须放在容器ID之前,放在容器ID之后会被识别为待执行命令的参数,导致命令解析错误。
  • typeorm是你在package.json的scripts中定义的npm脚本别名,不是容器内全局安装的可执行文件,不能直接作为命令调用,必须通过npm run前缀执行。
  • 补充:你提供的docker-compose.yml存在严重的缩进错误,postgres、backend、frontend服务的配置字段缩进层级错误,且没有显式加入自定义的portfolio网络,可能导致服务间网络不通。

错误2:本地直接运行typeorm报错getaddrinfo EAI_AGAIN postgres

postgres是Docker Compose内部的服务域名,仅能被同一Docker网络内的容器解析,你的本地主机不在该Docker网络中,无法解析该域名,因此数据库连接失败。

解决方案

1. 修正docker-compose.yml格式

首先修正yaml缩进,同时将所有服务显式加入自定义网络,避免网络异常:

version: "3.8"

services:
  postgres:
    image: postgres:13-alpine
    # restart: always
    volumes:
      - ./docker/db/data:${PGDATA:-/var/lib/postgresql/data}
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: root
      # POSTGRES_DB: db
    ports:
      - 5432:5432
    networks:
      - portfolio
  backend:
    build:
      context: backend
      target: dev
      dockerfile: Dockerfile
    volumes:
      - ./backend/:/src
    command: npm run start:dev
    ports:
      - "5000:3000"
    depends_on:
      - postgres
    environment:
      NODE_ENV: development
      DEBUG: nodejs-docker-express:*
      DB_SCHEMA: postgres
      DB_USER: root
      DB_PASSWORD: root
      DB_HOST: postgres
    networks:
      - portfolio
  frontend:
    ports:
      - 3001:3000
    build:
      context: frontend
      dockerfile: Dockerfile
    # volumes:
    #   - ./frontend:/usr/src/app
    #   - /usr/src/app/node_modules
    #   - /usr/src/app/.next
    networks:
      - portfolio

networks:
  portfolio:
    driver: bridge

修正后执行命令重启服务:

docker-compose up -d --force-recreate

2. 修正容器内执行typeorm的命令

使用如下正确格式执行命令:

sudo docker exec -it <backend_container_id> npm run typeorm -- migration:generate -n Entity

说明:--为npm参数分隔符,作用是将后续的参数全部传递给typeorm命令本身。

3. 本地执行typeorm的方案

修改本地数据库连接配置,将DB_HOST的值从postgres改为localhost,再执行命令即可。也可以临时指定环境变量运行:

DB_HOST=localhost npm run typeorm -- migration:generate -n Entity

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:36:00