在docker容器中安装PostgreSQL

10 浏览
0 Comments

在docker容器中安装PostgreSQL

我一直在跟随几个不同的教程以及官方教程,但是每当我尝试在容器中安装PostgreSQL时,之后就会收到以下消息:

psql: 无法连接到服务器:没有这样的文件或目录
服务器是否在本地运行并接受连接,
连接到Unix域套接字"/var/run/postgresql/.s.PGSQL.5432"?

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

0
0 Comments

安装PostgreSQL的Docker容器

=============================================

问题原因:

-----------------------

这段代码是用于在Docker容器中安装PostgreSQL数据库的。然而,在执行这段代码时可能会遇到以下问题:

1. 安装过程中出现依赖错误。

2. 在运行PostgreSQL之前需要进行其他配置。

解决方法:

-----------------------

为了解决上述问题,可以采取以下解决方法:

1. 确保容器的基础镜像正确,并且已经更新到最新版本。

2. 更新apt-get软件包管理器并安装所需的软件包。

3. 通过chpasswd命令设置postgres用户的密码。

4. 创建PostgreSQL集群并启动服务。

5. 使用su命令切换到postgres用户,并使用psql命令修改postgres用户的密码。

根据上述解决方法,我们可以将代码修改如下:

FROM postgres:9.6

RUN 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

RUN pg_createcluster 9.6 main --start

RUN /etc/init.d/postgresql start

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

通过以上修改,我们可以在Docker容器中成功安装并配置PostgreSQL数据库。

0
0 Comments

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

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

psql -h localhost [其他参数]

更新:或者与主机共享UNIX套接字描述符(psql将在其中启动),如主答案所示。但我更喜欢使用TCP套接字作为简单的管理方法。

应该接受这个答案,我遇到了这个错误。

0
0 Comments

在使用Docker容器安装PostgreSQL时出现了以下问题:应用程序/项目试图访问主机机器上的postgres套接字文件,而不是docker容器内的文件。要解决这个问题,可以通过使用-p标志来显式请求tcp/ip连接并设置postgres容器的端口,或者使用-v标志来与主机机器共享unix套接字。需要注意的是,使用-v--volume=标志意味着在主机机器和docker容器之间共享一些空间。这意味着如果在主机机器上安装了postgres并且正在运行,可能会遇到问题。

以下是如何运行一个既可以通过tcp/ip访问又可以通过unix套接字访问的postgres容器的示例命令,同时将容器命名为postgres

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

还有其他解决方法,但我认为这个是最合适的。最后,如果需要访问的应用程序/项目也是一个容器,最好直接将它们链接起来。

关于这里为什么要使用卷,并且如何运行类似的命令但保留数据的问题,假设我要给卷命名?你可以创建一个卷来存储数据,这意味着在容器内部将/var/lib/postgresql/data链接到容器外部的某个位置。

如果想从docker-compose.yml运行镜像,该怎么办?在Mac上无法共享Unix套接字,因此无法将来自docker容器(Linux)的Unix套接字与MacOS主机共享。

0