【问题标题】:Connect rails app in Docker container to external Postgresql Database via URL通过 URL 将 Docker 容器中的 Rails 应用程序连接到外部 Postgresql 数据库
【发布时间】:2017-03-23 04:04:03
【问题描述】:

我有一个带有 web rails 应用程序的 docker 容器。我的 osx 机器上还有外部数据库。如果我在 osx 上执行:

psql "postgres://postgres:testing@0.0.0.0:5432/movies_development"

我跑得很好

如果我在容器中运行它,我会收到

psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

对如何从容器连接到外部数据库有任何想法吗? 谢谢

【问题讨论】:

    标签: ruby-on-rails macos postgresql docker


    【解决方案1】:

    我找到了一种将 docker 容器中的应用程序连接到位于我的 osx 上的本地数据库的方法。

    0.0.0.0:5432 是容器的 localhost 地址(不是 osx 的 localhost),我们必须设置一个新的:

    1. 在“首选项”>“网络设置”中找到 osx Ip 本地地址(我的是 192.168.0.102)
    2. 将此 Ip 添加到 postgresql 配置文件的 listener_address: '192.168.0.102, localhost' 行。
    3. 在 pg_hba.conf 文件中添加带有 Ip 192.168.0.102、主机和 md5 的额外行
    4. 重启 Postgresql

    通过 ENV 在应用中设置连接设置,例如:postgres://postgres:testing@192.168.0.102:5432/movies_development

    【讨论】:

      【解决方案2】:

      根据您的问题,可能有两个原因:

      • 您在构建 docker 映像期间是否暴露了EXPOSE 5432?还是在使用 docker run -it -d --name $container_name -p 5432:5432 $image_name 启动容器之前?如果否,则您必须进行上述任何更改,然后才能连接到外部托管的数据库。
      • 如果您使用docker exec -it $container_name bash 进入您的docker 容器并执行此命令psql "postgres://postgres:testing@0.0.0.0:5432/movies_development",那么您的docker 容器中必须安装psql 客户端并使用正确的$PATH 变量,否则它会抛出类似命令未找到/否的错误这样的文件或目录。
      • 注意:如果您的应用程序使用其他方式与数据库通信,那么您的应用程序将在没有 psql 客户端程序的情况下工作。

      希望对您有所帮助。谢谢!

      【讨论】:

        猜你喜欢
        • 2016-07-14
        • 2011-08-24
        • 1970-01-01
        • 1970-01-01
        • 2020-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多