Maj*_*tte 5 postgresql node.js express docker prisma
经过几个小时的搜索,我必须鞠躬并向您询问有关我的问题的一些建议:
我的后端(express + prisma + postgresql)是 Dockerized 的,可以正常运行,但我无法使用npx prismawsl2 zsh 终端中的命令。
这是我的 .env
# Database settings
NODE_ENV=dev
DB_USER=user
DB_PASS=password
DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@postgres/chimere?schema=public"
Run Code Online (Sandbox Code Playgroud)
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"]
Run Code Online (Sandbox Code Playgroud)
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:
Run Code Online (Sandbox Code Playgroud)
和 Prisma 架构:
generator client {
provider = "prisma-client-js"
binaryTargets = ["native", "linux-musl"]
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我对 Docker 还很陌生,几乎所有东西都是来自 Google 的经过调整的 copypasta(:
如何让我的应用程序正常工作并让我的命令也正常工作?
谢谢 !
小智 10
我遇到了同样的问题,但它是在一个mysql容器上。DATABASE_URL基本上我的文件中有问题.env。它看起来像这样:
DATABASE_URL="mysql://${DB_USER}:${DB_PASS}@localhost:3306/project_name"
Run Code Online (Sandbox Code Playgroud)
问题是localhost。显然,当在容器内运行时,localhost它使用容器的名称而不是。我更改了 docker compose 以指定容器的名称:
DATABASE_URL="mysql://${DB_USER}:${DB_PASS}@localhost:3306/project_name"
Run Code Online (Sandbox Code Playgroud)
注意container_name属性。之后,我将其更改.env为:
DATABASE_URL="mysql://${DB_USER}:${DB_PASS}@mysql:3306/project_name"
Run Code Online (Sandbox Code Playgroud)
我建议你尝试类似的事情。也许是这样的:
version: '3.1'
services:
db:
image: mysql
container_name: mysql
ports:
- 3306:3306
Run Code Online (Sandbox Code Playgroud)
对于您来说,.env您可以保持现在的方式,除非您选择了不同的容器名称,然后您将用您在大括号内选择的名称进行替换(请记住删除大括号):
DATABASE_URL="postgresql://${DB_USER}:${DB_PASS}@{container_name}/chimere?schema=public"
Run Code Online (Sandbox Code Playgroud)
另请查看此 GitHub 问题以获取更多信息: https ://github.com/prisma/prisma/issues/1385
| 归档时间: |
|
| 查看次数: |
10105 次 |
| 最近记录: |