Docker Prisma 错误 P1001:无法访问 `postgres` 处的数据库服务器:`5432`

2023-11-29

经过几个小时的搜索,我必须鞠躬并向您询问有关我的问题的一些建议:

我的后端(express + prisma + postgresql)是 Dockerized 的,可以正常运行,但我无法使用npx prisma来自我的 wsl2 zsh 终端的命令。

这是我的 .env

# Database settings
NODE_ENV=dev
DB_USER=user
DB_PASS=password
DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@postgres/chimere?schema=public"

Dockerfile:

FROM node:17-alpine3.14 as base

WORKDIR /user/src/app
COPY package*.json /user/src/app/
EXPOSE 5000

FROM base as dev
ENV NODE_ENV=development
RUN npm install -g nodemon && npm install
COPY . /user/src/app/
RUN npx prisma generate
CMD ["nodemon", "src/index.js"]

FROM base as production
ENV NODE_ENV=production
RUN npm ci
COPY . /user/src/app/
RUN npx prisma generate
CMD ["node", "src/index.js"]

docker-compose.yml :

version: '3.8'
services:
  postgres:
    image: postgres
    restart: always
    environment:
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASS}
    volumes:
      - postgres:/var/lib/postgresql/data
    ports:
      - '5432:5432'
  web:
      build:
        context: ./
        target: dev
      restart: always
      volumes:
        - .:/usr/src/app
        - uploaded-files:/usr/src/app/public/media/files
        - uploaded-pictures:/usr/src/app/public/media/pictures
      command: npm run start:dev
      ports:
        - "5000:5000"
      environment:
        NODE_ENV: development
        DEBUG: nodejs-docker-express:*

volumes:
    postgres:
    uploaded-files:
    uploaded-pictures:

和 Prisma 架构:

generator client {
    provider      = "prisma-client-js"
    binaryTargets = ["native", "linux-musl"]
}

datasource db {
    provider = "postgresql"
    url      = env("DATABASE_URL")
}

正如你所看到的,我对 Docker 还很陌生,几乎所有东西都是来自 Google 的调整后的 copypasta(:

如何让我的应用程序正常工作并让我的命令也正常工作?

Thanks !


我面临着同样的问题,但它是在mysql容器。基本上我的方法有问题DATABASE_URL in my .env文件。它看起来像这样:

DATABASE_URL="mysql://${DB_USER}:${DB_PASS}@localhost:3306/project_name"

问题是localhost。显然,当在容器内运行时,而不是localhost,它使用容器名称。我更改了 docker compose 以指定容器的名称:

version: '3.1'

services:

  db:
    image: mysql
    container_name: mysql
    ports:
      - 3306:3306

注意container_name财产。之后,我改变了我的.env to:

DATABASE_URL="mysql://${DB_USER}:${DB_PASS}@mysql:3306/project_name"

我建议你尝试类似的事情。也许是这样的:

version: '3.8'
services:
  postgres:
    image: postgres
    container_name: postgres
    restart: always
    environment:
      - POSTGRES_USER=${DB_USER}
      - POSTGRES_PASSWORD=${DB_PASS}
    volumes:
      - postgres:/var/lib/postgresql/data
    ports:
      - '5432:5432'

并为您的.env您可以保留现在的方式,除非您选择了不同的容器名称,然后您将用您在大括号内选择的名称替换(请记住删除大括号):

DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@{container_name}/chimere?schema=public"

另请查看此 GitHub 问题以获取更多信息:https://github.com/prisma/prisma/issues/1385

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker Prisma 错误 P1001:无法访问 `postgres` 处的数据库服务器:`5432` 的相关文章

随机推荐