我最近设置了一个prisma项目,下面是我的docker-compose.yml文件
version: '3'
services:
prisma:
image: prismagraphql/prisma:1.31
restart: always
ports:
- '4030:4466'
environment:
TZ: ${PRISMA_DB_TIME_ZONE}
PRISMA_CONFIG: |
port: 4466
# managementApiSecret: my-secret
databases:
default:
connector: postgres
host: postgres
port: 5432
user: prisma
password: ${PRISMA_DB_PASSWORD}
migrations: true
rawAccess: true
postgres:
image: postgres:10.3
restart: always
ports:
- "3306:3306"
environment:
POSTGRES_USER: prisma
POSTGRES_PASSWORD: ${PRISMA_DB_PASSWORD}
TZ: ${PRISMA_DB_TIME_ZONE}
volumes:
- postgres:/var/lib/postgresql/data
volumes:
prisma:
postgres:我可以打开我的prisma操场,它的功能没有任何问题。但是我不能用dbeaver直接连接postgre容器。
数据海狸错误消息
Connection reset为什么我与数据库的连接失败?
这张照片会有帮助的。

发布于 2019-05-22 10:05:37
默认情况下,postgres监听端口5432。
在postgres容器规范中,应该公开端口5432而不是3306。
version: '3'
services:
prisma:
image: prismagraphql/prisma:1.31
restart: always
ports:
- '4030:4466'
environment:
TZ: ${PRISMA_DB_TIME_ZONE}
PRISMA_CONFIG: |
port: 4466
# managementApiSecret: my-secret
databases:
default:
connector: postgres
host: postgres
port: 5432
user: prisma
password: ${PRISMA_DB_PASSWORD}
migrations: true
rawAccess: true
postgres:
image: postgres:10.3
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_USER: prisma
POSTGRES_PASSWORD: ${PRISMA_DB_PASSWORD}
TZ: ${PRISMA_DB_TIME_ZONE}
volumes:
- postgres:/var/lib/postgresql/data
volumes:
prisma:
postgres:如果您的主机中的5432端口已经在使用,如果您想使用3306,那么您可以进行如下端口转发:
postgres:
image: postgres:10.3
restart: always
ports:
- "3306:5432"
environment:
POSTGRES_USER: prisma
POSTGRES_PASSWORD: ${PRISMA_DB_PASSWORD}
TZ: ${PRISMA_DB_TIME_ZONE}
volumes:
- postgres:/var/lib/postgresql/data更新- 1
prisma能够访问postgres的原因
端口部分仅用于使我们的服务在主机级别上可访问。但在容器级别,如果在容器中打开了端口,则任何其他正在运行的容器都可以通过网络或链接部分访问该端口。
默认情况下,docker-compose将为每个docker-compose.yml文件创建一个网络,并将该文件中的所有服务连接到该网络中。
这就是为什么我们可以使用<service name>作为主机名并将该名称解析为相应容器(在您的例子中是postgres)的ip地址。
https://stackoverflow.com/questions/56254196
复制相似问题