【问题标题】:Docker compose, accessing a Postgres container from an other containerDocker compose,从另一个容器访问 Postgres 容器
【发布时间】:2021-12-08 07:20:59
【问题描述】:

我有一个非常简单的设置,一个容器中的 Web 应用程序和另一个容器中运行的 Postgres 服务。

我需要连接到 Postgres 容器并认为 PGHOST="db" 会指向该容器 ..?

但我不断收到Error: getaddrinfo ENOTFOUND "db" at GetAddrInfoReqWrap.onlookup 我读为;找不到“db”主机...

我在这里错过了什么?

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8081:3011"
    links:
      - db
    environment:
      - PGHOST="db"
      - PGDATABASE="testdb"
      - PGUSER="postgres"
      - PGPASSWORD="postgres"
  db:
    image: postgres
    ports:
      - "5432:5432"
    volumes:
      - /usr/local/var/postgresql@13

【问题讨论】:

  • 很确定这已经在其他地方得到了回答,但你不需要 " 围绕 db
  • 如果你想使用引号,你应该引用完整的字符串,而不仅仅是它的一部分,但是在 YAML 中你大部分时间都不需要引号。
  • Isschh .. ????‍♂️ 当然。谢谢。

标签: node.js postgresql docker docker-compose


【解决方案1】:

试试这个配置。传递环境变量时不需要引号。最好在此处使用depends_on 以确保在您的应用启动之前数据库已启动并运行。

version: "3.9"
services:
  web:
    build: .
    ports:
      - "8081:3011"
    depends_on:
      - db
    environment:
      - PGHOST=db
      - PGDATABASE=testdb
      - PGUSER=postgres
      - PGPASSWORD=postgres
  db:
    image: postgres
    ports:
      - "5432:5432"
    volumes:
      - /usr/local/var/postgresql@13

【讨论】:

  • 您可能希望为web 服务添加depends_on 子句。我不确定这里是否需要links 子句
  • @Hollyol,感谢编辑了答案。
  • 最好将应用程序设计为在没有 depends_on 的情况下使用重试逻辑之类的东西工作。
  • depends_on: 实际上并不能确保数据库已启动并运行;见Docker Compose wait for container X before starting Y。 (它确实避免了 DNS 查找错误,但通常是一种很好的做法。)
猜你喜欢
  • 2019-06-13
  • 2021-03-04
  • 2017-07-12
  • 1970-01-01
  • 2023-02-24
  • 2019-10-05
  • 1970-01-01
  • 2019-10-05
相关资源
最近更新 更多