【问题标题】:Can Docker image postgres:11.7-alpine talk to two servers at the same time?Docker 镜像 postgres:11.7-alpine 可以同时与两台服务器通信吗?
【发布时间】:2020-05-13 08:08:06
【问题描述】:

我在尝试连接到我的 postgres 实例时遇到连接错误,该实例是容器内的 postgres:11.7-alpine 映像。

我的理解:

  1. 我有一个代码库。

  2. 我有一个容器,其中在端口 5432:5432 上运行了一个 postgres:11.7-alpine 映像

  3. 我有一个容器,其中包含一个从上面第 1 点的代码库构建的图像,该容器在端口 8000:8000 上运行。

在容器内,一切运行良好(意味着没有错误,并且 postgress 连接到第 3 点。我使用了docker-compose up --build

当我尝试启动我的代码库(第 1 点)时,出现连接错误。我怀疑它正在尝试连接到 postgres(第 2 点),但容器内的 postgres 已经连接到我的副本代码库(第 3 点)

如何复制

docker-compose up --build

结果一切正常

然后我启动我的代码库(第 1 点)并出现连接错误。

预期行为

docker-compose up --build 结果一切正常 然后我启动我的代码库(第 1 点)并且还能够连接到 docker 容器中的 postgres 实例。

version: '3.6'
services:

  # App Backend PostgreSQL
  postgres:
    container_name: sportsAppApiDb
    image: postgres:11.7-alpine
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: password
      POSTGRES_URL: postgres://admin:password@localhost:5432/sportsappapi
      POSTGRES_DB: sportsappapi
      POSTGRES_HOST: postgres
    ports:
      - "5432:5432"

  # App Backend
  sports-app-api:
    container_name: sportsAppApi
    build: ./
    volumes:
      - ./:/usr/src/sports-app-api
    command: sbt run
    working_dir: /usr/src/sports-app-api
    ports:
      - "8000:8000"
    environment:
      POSTGRES_URI: postgres://admin:password@postgres:5432/sportsappapi

【问题讨论】:

  • 我猜在第一种情况下,您会尝试从 Docker 外部调用此设置。您如何在那里配置数据库连接?你得到的实际错误是什么? (Docker 中的 PostgreSQL 没有你描述的那种限制,它一次只能接受来自一个地方的连接。)

标签: docker docker-compose dockerfile docker-machine


【解决方案1】:

好的,您想从 docker 容器以及从 IDE 运行的应用程序连接到 postgres。由于您将 postgres 端口从容器绑定到主机,因此要连接另一个应用程序,您可以使用主机的 5432 端口。

IDE 中代码库的连接字符串为

postgres://admin:password@0.0.0.0:5432/sportsappapi

但这只有在 docker-compose up --build 启动并运行时才有效。

【讨论】:

  • postgres 是 Compose 服务块的名称,它也可用作主机名,假设客户端在 Docker 中以相同的 Compose 设置运行。 Networking in Compose 进一步描述了这一点。 (我倾向于建议删除 container_name:,因为有一个备用的可用网络名称,并且 Compose 可以自己选择一个唯一的容器名称。)
  • @fullStackRyan 我之前没有完全理解你的问题。我已经更新了答案。
  • @MjZac 感谢您花时间回答。我将 docker-compose 文件更改为这个 ``` # App Backend sports-app-api: container_name: sportsAppApi build: ./ volumes: - ./:/usr/src/sports-app-api command: sbt run working_dir: /usr/src/sports-app-api 端口:-“8000:8000”环境:POSTGRES_URI:postgres://admin:password@0.0.0.0:5432/sportsappapi 依赖于:sportsAppApiDb ``` 仍然无法工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多