通过URL将Docker容器中的rails应用程序连接到外部Postgresql数据库

时间:2017-03-23 04:04:04

标签: ruby-on-rails macos postgresql docker

我有一个带有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"?

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

2 个答案:

答案 0 :(得分:0)

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

  • 您在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客户端程序的情况下工作。

希望这有帮助。谢谢!

答案 1 :(得分:0)

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

0.0.0.0:5432是容器的本地主机地址(不是osx的本地主机),我们必须设置新的地址:

  1. 在首选项中查找osx IP本地地址>网络设置(我是192.168.0.102)
  2. 将此Ip添加到postgresql配置文件的行listener_address: '192.168.0.102, localhost'
  3. 在Ip 192.168.0.102,host和md5到pg_hba.conf文件中添加额外的行
  4. 重新启动Postgresql
  5. 通过ENV在app中设置连接设置,如:postgres:// postgres:testing@192.168.0.102:5432 / movies_development