将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客户端正确的$PATH
variables,否则会抛出错误,如命令没有find/没有这样的文件或目录。 - 注意:如果您的应用程序正在使用其他方式与数据库进行通信,则应用程序将无需psql客户端程序。
希望这个帮助,谢谢!
我find了一个将泊坞窗容器中的应用程序连接到位于我的osx上的本地数据库的方法。
0.0.0.0:5432是容器的本地主机地址(不是osx的本地主机),我们必须设置新的:
- 在首选项>networking设置(我的是192.168.0.102)中查找osx Ip本地地址
- 添加这个IP到线
listener_address: '192.168.0.102, localhost'
的postgresqlconfiguration文件。 - 用ip 192.168.0.102,host和md5添加额外的行到pg_hba.conf文件
- 重新启动Postgresql
在应用中通过ENV设置连接设置,如:postgres:// postgres:testing@192.168.0.102:5432 / movies_development