Postgresql 访问postgres docker容器时发生连接错误
我最近设置了一个prisma项目,这是我的docker-compose.yml文件Postgresql 访问postgres docker容器时发生连接错误,postgresql,docker,prisma,Postgresql,Docker,Prisma,我最近设置了一个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:
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容器的直接连接
dbeaver错误消息
Connection reset
为什么我的数据库连接失败
这张照片会有帮助的。
postgres
默认情况下侦听端口5432
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:
在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
文件创建一个网络,并将该文件中的所有服务加入该网络
这就是我们可以使用
作为主机名的原因,compose会将该名称解析为相应(在您的案例中是postgres)容器的ip地址。谢谢。!数据库连接正在工作。但是prisma是如何使用我的docker-compose.yml设置连接到postgre容器的?我使用的是3306:3306,我可以创建新节点,并且通过prisma Played成功地将所有数据操作保存到postgres.ports部分,目的只是让我们的服务在主机级别上可以访问。但在容器级别,如果容器中的某个端口是打开的,则任何其他正在运行的容器都可以在网络或链接部分的帮助下访问该端口。默认情况下,docker compose将根据docker compose.yml
文件创建一个网络,并将该文件中的所有服务连接到该网络中。这就是我们可以使用
作为主机名的原因,compose会将该名称解析为相应(在您的案例中是postgres)容器的ip地址。