在docker容器中安装PostgreSQL

Kri*_*ski 16 docker postgresql-9.3

我一直在关注几个不同的教程以及官方教程但是每当我尝试在容器中安装PostgreSQL时我会得到以下消息

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"?
Run Code Online (Sandbox Code Playgroud)

我已经在SO和整个互联网上查看了几个问题,但没有运气.

Vas*_*lka 10

问题是您的应用程序/项目正在尝试访问HOST计算机中的postgres套接字文件(而不是docker容器).

要解决这个问题,要么在使用-p标志为postgres容器设置端口时要么显式请求tcp/ip连接,要么使用-v标志与HOST maching共享unix socket .

:注意:使用-v--volume=标志意味着您在HOST计算机和docker容器之间共享一些空间.这意味着如果您在主机上安装了postgres并且其运行,您可能会遇到问题.

下面我将演示如何运行一个可以从tcp/ip和unix socket访问的postgres容器.我也将容器命名为postgres.

docker run -p 5432:5432 -v /var/run/postgresql:/var/run/postgresql -d --name postgres postgres

还有其他解决方案,但我觉得这个最合适.最后,如果需要访问的应用程序/项目也是一个容器,最好只链接它们.

  • @Vasspilka但是如果我想从 docker-compose.yml 运行我的图像我该怎么办 (5认同)

Tim*_*nov 5

默认情况下psql是尝试使用UNIX套接字连接到服务器。这就是为什么我们看到/var/run/postgresql/.s.PGSQL.5432-UNIX套接字描述符的位置的原因。

如果您在具有端口绑定的docker中运行postgresql-server,则必须告诉psql使用TCP-socket。只需添加host参数(--host-h):

psql -h localhost [any other params]