如何在docker中将数据从一个容器获取到另一个容器?我收到了ECONNREFUSED错误

时间:2018-06-18 04:45:25

标签: node.js postgresql docker docker-compose

我一直试图从postgres容器获取信息到一个带有docker的节点容器。我使用了下面提供的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

当我在浏览器中加载node-web app时,除了应从数据库中检索的信息外,所有内容都完全加载。我在容器的日志中收到以下错误:

  

{错误:连接ECONNREFUSED 127.0.0.1:5432 at   TCPConnectWrap.afterConnect [as oncomplete](net.js:1158:14)       代码:'ECONNREFUSED',       系统调用:'connect',       地址:'127.0.0.1',       港口:5432}

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

非常感谢您提前!

1 个答案:

答案 0 :(得分:0)

你的第一个命令:

  

psql -h localhost -p 3030 -U postgres tweets1

适用于主机,因为您在声明postgres容器时添加了端口绑定。端口绑定不适用于其他容器。

容器 - >容器连接需要定期网络连接。

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

所以,在web容器中尝试:

  

psql -h postgres -p 3030 -U postgres tweets1

<强>最后:

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