我一直在尝试使用docker从postgres容器到节点容器获取信息。我使用了下面提供的docker-compose文件:

version: "3"
services:
  postgres:
    image: postgres:latest
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    networks:
      - webnet
    environment:
      POSTGRES_USER: 'postgres'
      POSTGRES_PASSWORD: 'root'
      POSTGRES_DB: 'tweets1'
      PGDATA: '/tmp'
  web:
    image: node-app
    ports:
      - "4556:3000"
    depends_on:
      - "postgres"
    links:
      - postgres
    networks:
      - webnet
    command: ["./wait-for-it.sh","postgres:5432","--","node","dashboard.js"]
networks:
  webnet:

在运行docker-compose后,日志中的所有内容看起来都很好。 Postgres首先启动,实际上我可以使用
psql -h localhost -p 3030 -U postgres tweets1

当我在浏览器中加载节点Web应用程序时,除了应该从数据库中检索到的信息之外,所有内容都可以完美加载。我在容器的日志中收到以下错误:



我一直在尝试在我的PG配置变量中使用 host.docker.internal ,但是它也不起作用。当我通过docker container ps检查我的容器时。两者都已启动并正在运行。

提前非常感谢您!

最佳答案

您的第一个命令:



主机上工作,因为在声明postgres容器时添加了端口绑定(bind)。但是,端口绑定(bind)不适用于其他容器。

容器->容器连接需要常规的网络连接。

您会发现通常docker使用分配给容器的名称在容器的/ etc / hosts中声明链接的容器。

因此,在web容器中尝试:



最后:

在代码中,您应该连接到 postgres 主机而不是localhost。

关于node.js - 如何在Docker中将数据从一个容器获取到另一个容器?我收到ECONNREFUSED错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50902783/

10-16 05:51