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

我有一个networking导轨应用程序的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"? 

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

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

  • 您在EXPOSE 5432镜像构build过程中是否暴露过EXPOSE 5432 ? 或在启动容器与docker run -it -d --name $container_name -p 5432:5432 $image_name ? 如果没有,你必须做任何以上的变化,而不是连接到外部托pipe的数据库。
  • 如果你用docker exec -it $container_name bash进入你的docker容器,并执行命令psql "postgres://postgres:testing@0.0.0.0:5432/movies_development"那么必须在你的docker容器中安装psql客户端正确的$PATHvariables,否则会抛出错误,如命令没有find/没有这样的文件或目录。
  • 注意:如果您的应用程序正在使用其他方式与数据库进行通信,则应用程序将无需psql客户端程序。

希望这个帮助,谢谢!

我find了一个将泊坞窗容器中的应用程序连接到位于我的osx上的本地数据库的方法。

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

  1. 在首选项>networking设置(我的是192.168.0.102)中查找osx Ip本地地址
  2. 添加这个IP到线listener_address: '192.168.0.102, localhost'的postgresqlconfiguration文件。
  3. 用ip 192.168.0.102,host和md5添加额外的行到pg_hba.conf文件
  4. 重新启动Postgresql

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