
临时用 Compose 暴露的端口与 .env 密码一致宿主机通过 Compose 映射5433:5432连接容器内 PostgreSQL下文示例统一使用localhost:5433。1. 临时环境变量$env:DATABASE_URLpostgresql://postgres:你的密码localhost:5433/nodejs_study?schemapublic这行只在 当前 PowerShell 窗口Windows 本机 里设了一个临时环境变量。环境变量优先级情况用哪个PowerShell 里先执行了 $env:DATABASE_URL…用进程里的当前终端临时值没设 $env:DATABASE_URL从.env加载dotenv/config两个都有进程环境变量优先dotenv 通常不覆盖已存在的变量✅ 实际流程实际发生的是┌─────────────────────────────────────────────────────────┐ │ Windows 本机 │ │ │ │ ① npx prisma migrate deploy 启动Node 进程在本机 │ │ ② 读 DATABASE_URL → 知道连 localhost:5433 │ │ ③ 读项目里 prisma/migrations/*.sql文件在本机磁盘 │ │ ④ 通过 TCP 连 localhost:5433 │ │ │ │ │ ▼ Docker 端口转发 │ │ ┌──────────────────────────────────┐ │ │ │ nodejs-postgres 容器 │ │ │ │ PostgreSQL 监听 容器内 :5432 │ │ │ │ 数据存在 pgdata 卷里 │ │ │ │ │ │ │ │ ⑤ 收到 SQLCREATE TABLE ... │ │ │ │ ⑥ 在容器自己的库里执行、存数据 │ │ │ └──────────────────────────────────┘ │ └─────────────────────────────────────────────────────────┘迁移程序在本机SQL 文件在本机容器只负责执行 SQL 并保存结果。Prisma CLI 会用DATABASE_URL连上数据库查_prisma_migrations表看哪些迁移已执行对未执行的迁移逐条发送 SQL记录迁移历史2. 迁移 SQL 能建表不会产生数据只有 migration 文件里 本身写了 数据类 SQLdeploy 时才会在 当前DATABASE_URL连的那套库 里产生数据例如INSERTINTOProduct(name,price,stock)VALUES(示例,9.99,100);3. 理解 compose 文件及环境变量的关系1. compose 里是为了初始化一个数据库environment:POSTGRES_USER:postgresPOSTGRES_PASSWORD:yiyi199836# 与 .env 里 DATABASE_URL 密码一致POSTGRES_DB:nodejs_study对应docker-compose.yml中的端口映射ports:-5433:5432# 宿主机 5433 → 容器内 54322. 临时环境变量$env:DATABASE_URLpostgresql://postgres:密码localhost:5433/nodejs_study?schemapublic执行这个命令是为了能够连接上面数据库然后迁移的时候执行 SQL 语句建表如果不在当前进程中设置环境变量就要改.env文件连接容器或者 PostgreSQL连哪个就要端口号、账户、密码改成对应的。