gpt4 book ai didi

docker - 如何将一个Docker容器链接到另一个Docker容器中的postgres数据库?

转载 作者:行者123 更新时间:2023-12-02 20:10:14 26 4
gpt4 key购买 nike

这是我的docker-compose.yml:

version: '2'
services:
postgres:
image: "postgres:9.4"
ports:
- "5432:5432"

我用它来调出postgres db,如下所示:
docker-compose up

现在,我可以本地连接到数据库了:
> psql postgres://postgres:postgres@docker-machine:5432
psql (9.6.4, server 9.4.13)
Type "help" for help.

postgres=#

我的应用程序是一个连接到postgres数据库的Ruby / Sinatra应用程序。

当我使用 bin/server脚本直接启动应用程序时,该应用程序启动并连接到数据库就很好。

这就是我构建和运行dockerized应用程序的方式:
docker build -t my_app .

docker run \
-p 3001:3001 \
-e DATABASE_URI="postgres://postgres:postgres@docker-machine:5432" \
my_app bin/server

当我像这样通过Docker运行应用程序时,它无法连接到数据库,并显示此错误:
Sequel::DatabaseConnectionError: PG::ConnectionBad: could not connect to server: Connection refused
Is the server running on host "docker-machine" (127.0.0.1) and accepting
TCP/IP connections on port 5432?

如何获得我的dockerized应用程序以提供的URI连接到postgres数据库?

最佳答案

您可以执行以下任一操作:

  • 使用相同的docker-compose fil
  • 同时启动两个容器
  • 您可以使用名称服务器,该服务器将允许您为数据库容器使用名称,以便可以从您的App容器内部看到
  • 您可以只使用数据库容器的IP地址,但是,如果数据库容器崩溃并重新启动,它将具有不同的IP地址,这会使您的App容器崩溃。

  • 您的App容器会尝试连接到localhost(在容器本身内部),因为它没有运行Postgres,因此当然无法。

    关于docker - 如何将一个Docker容器链接到另一个Docker容器中的postgres数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47083972/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com