在docker容器中安装PostgreSQL

Installing PostgreSQL within a docker container

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

1
2
3
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"?

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


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

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

:注意:
使用-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

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


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

如果你在docker中使用端口绑定运行postgresql-server,那么你必须告诉psql使用TCP-socket。只需添加参数:

psql -h localhost [any other params]


以下是修复该错误的说明,该错误也适用于您的docker容器:PostgreSQL错误'无法连接到服务器:没有此类文件或目录'

如果由于任何原因不起作用,你可以在Docker索引上查看许多现成的postgresql docker容器以供参考:https://index.docker.io/search?q = postgregql

许多容器都是在github上使用可靠的repos构建的。因此,如果您发现它看起来符合您的需求,您可以查看来源。

Flynn项目还包括一个可能值得一试的postgresql设备:https://github.com/flynn/flynn-postgres


来自postgres:9.6

运行apt-get update&& apt-get install -q -y postgresql-9.6 postgresql-client-9.6 postgresql-contrib-9.6 postgresql-client-common postgresql-common
RUN echo postgres:postgres | chpasswd的

运行pg_createcluster 9.6 main --start

运行/etc/init.d/postgresql启动

RUN su -c"psql -c"ALTER USER postgres PASSWORD'postgres';"postgres