【问题标题】:docker-compose up && docker-compose build : error with PostgreSQLdocker-compose up && docker-compose build : PostgreSQL 错误
【发布时间】:2019-07-22 17:14:35
【问题描述】:

我尝试实现我的 docker-compose 文件,但我的数据库 PostgreSQL 出现错误。 如果我用 npm start 开始我的项目,我没有问题。 为了使用 docker 开始我的项目,我使用:docker-compose up && docker-compose build

docker-compose.yml
version: "3"
services:
  server:
    build: .
    container_name: dev-area-2018
    ports:
      - 8080:8080
    depends_on:
      - db
db:
  image: postgres:latest
  ports:
    - 5432:5432
  environment:
    DATABASE_URL: postgres://postgers@db:5432/API
# volumes:
#   - /var/lib/postgres/data
client:
   build: ./client_web/
   container_name: client_web
   ports:
     - 8081:8081

我的输出:

Starting client_web         ... done
Starting dev_area_2018_db_1 ... done
Starting dev-area-2018      ... done
Attaching to dev_area_2018_db_1, client_web, dev-area-2018
db_1      | 2019-02-28 17:51:40.679 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
db_1      | 2019-02-28 17:51:40.679 UTC [1] LOG:  listening on IPv6 address "::", port 5432
db_1      | 2019-02-28 17:51:40.698 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1      | 2019-02-28 17:51:40.741 UTC [23] LOG:  database system was shut down at 2019-02-28 17:46:23 UTC
db_1      | 2019-02-28 17:51:40.759 UTC [1] LOG:  database system is ready to accept connections

client_web |
client_web | > dev-area-2018-client@0.0.0 start /usr/src/app
client_web | > node ./app.js
client_web |
client_web | Your client is currently running on port 8081
dev-area-2018 |
dev-area-2018 | > dev-area-2018@0.0.0 start /usr/src/app
dev-area-2018 | > node ./bin/www
dev-area-2018 |
dev-area-2018 | Server running at http://localhost:8080/
dev-area-2018 | could not connect to postgres { Error: connect ECONNREFUSED 127.0.0.1:5432
dev-area-2018 |     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1083:14)
dev-area-2018 |   errno: 'ECONNREFUSED',
dev-area-2018 |   code: 'ECONNREFUSED',
dev-area-2018 |   syscall: 'connect',
dev-area-2018 |   address: '127.0.0.1',
dev-area-2018 |   port: 5432 }

我不明白为什么我无法使用 Docker 将我的服务器连接到我的数据库 PostgreSQL。

编辑: 感谢您的帮助,但是对于您的解决方案,我总是遇到相同的问题和相同的输出。 我已经成功使用了这个 docker-compose:

version: "3"
services:
  server:
    build: .
    container_name: dev-area-2018
    restart: always
    ports:
      - 8080:8080
    links:
      - db
      - db:database
    depends_on:
      - db
    environment:
      DATABASE_URL: postgres://postgres@db
  client:
    build: ./client_web/
    container_name: client_web
    ports:
       - 8081:8081
  db:
    image: postgres:latest
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: postgres
      POSTGRES_DB: API

谢谢你, 问候。

【问题讨论】:

  • 它似乎正在连接到本地主机。您是否为您的 dev-area-2018 容器指定了主机字符串?

标签: node.js postgresql docker docker-compose


【解决方案1】:

当使用带有 docker 的 postgres 时,我建议不要像上面那样设置 URL。您在上面设置的 URL 已经是您通过内部 docker 网络访问它的方式。如果您删除它,那么您需要访问 postgres 实例的 URL 是 postgres://USER:PWD@postgres/your_db

另外,您的网址中确实存在拼写错误。

【讨论】:

    【解决方案2】:

    我不明白为什么我无法将我的服务器连接到我的数据库 PostgreSQL 与 Docker。

    因为在大多数情况下server 容器会启动并尝试连接到db 容器,但是db 需要时间来启动(通常为 10-15 秒)。

    这就是您收到could not connect to postgres { Error: connect ECONNREFUSED 127.0.0.1:5432 异常的原因,因为db 尚未启动并准备好接受连接。

    你可以做的是在你的server容器启动失败后重新启动它。

    version: "3"
    services:
      server:
        build: .
        container_name: dev-area-2018
        restart: always # will restart the container if fails to start
        ports:
          - 8080:8080
        depends_on:
          - db
    ...
    

    【讨论】:

      【解决方案3】:

      您的项目客户正在尝试访问 127.0.0.1:5432 中的 postgress,该地址不再适用于 docker 架构。

      根据docker documentation

      默认情况下,Compose 会为您的应用设置一个网络。每个 服务容器加入默认网络,并且两者都是 该网络上的其他容器可以访问,并且可以被该网络上的其他容器发现 它们位于与容器名称相同的主机名。

      Docker 为您管理虚拟网络中的所有实例,并使用您在 docker-compose 文件中分配给容器的名称使它们可用。

      因此,您必须从您的客户端访问使用以下字符串的 postgress:

       postgres://<user>:<password>@db/api.
      

      请注意,任何对db 的请求都将被 docker 捕获并重定向到 docker 管理的虚拟网络中容器的 host:port

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-18
        • 2021-11-24
        • 1970-01-01
        • 2022-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多