首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接访问postgres码头容器时出错

连接访问postgres码头容器时出错
EN

Stack Overflow用户
提问于 2019-05-22 09:59:12
回答 1查看 1.1K关注 0票数 1

我最近设置了一个prisma项目,下面是我的docker-compose.yml文件

代码语言:javascript
复制
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容器。

数据海狸错误消息

代码语言:javascript
复制
Connection reset

为什么我与数据库的连接失败?

这张照片会有帮助的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-22 10:05:37

默认情况下,postgres监听端口5432

在postgres容器规范中,应该公开端口5432而不是3306

代码语言:javascript
复制
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,那么您可以进行如下端口转发:

代码语言:javascript
复制
  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地址。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56254196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档