Docker搭建Postgresql数据库

使用Docker搭建Postgresql数据库,及设置远程访问

一、拉取Postgresq镜像

docker pull postgres

二、构建镜像容器

docker run -it --name postgres --restart always -e POSTGRES_PASSWORD='abc123' -e ALLOW_IP_RANGE=0.0.0.0/0 -v /home/postgres/data:/var/lib/postgresql -p 55433:5432 -d postgres

–name : 自定义容器名称
POSTGRES_PASSWORD:数据库密码
-e ALLOW_IP_RANGE=0.0.0.0/0,这个表示允许所有ip访问,如果不加,则非本机 ip 访问不了
-v :进行映射,本地目录:容器内路径
-p:映射端口,宿主机端口:容器端口
最后是 镜像名称:端口号

三、进入postgres容器

docker exec -it postgres bash

四、切换当前用户,再登录数据库

将当前root切换成postgres

su postgres

输入用户名,密码再命令执行完后,再根据提示输入

psql -U postgres -W

输入密码,登录成功
在这里插入图片描述

五、设置远程访问许可(很重要)

共需要修改两个配置文件:pg_hba.conf、postgresql.conf,步骤分别如下:

1、修改postgres配置文件

首先,确认已进入容器,再按下列步骤操作:

1)、修改pg_hba.conf文件

A、用命令将postgres中的pg_hba.conf文件,复制到目录/home中
docker cp postgres:/var/lib/postgresql/data/pg_hba.conf /home
B、用Xftp连接服务器,找到home下的pg_hba.conf,并用记事本打开及修改用户的访问权限(#开头的行是注释内容):
# TYPE DATABASE  USER    CIDR-ADDRESS     METHOD
 # "local" is for Unix domain socket connections only
 local all    all               trust
 # IPv4 local connections:
 host  all    all    127.0.0.1/32     trust
 *host  all    all    0.0.0.1/0    md5*
 # IPv6 local connections:
 host  all    all    ::1/128       trust

####C、用命令将修改后的文件,替换掉原来的配置文件

docker cp /home/pg_hba.conf postgres:/var/lib/postgresql/data

2)、修改postgresql.conf文件

如上述修改pg_hba.conf一样,先复件到/home文件夹中,然后打开编辑,最后替换掉原配置文件。
定位到 #listen_addresses = ’localhost’,再将行开头都#去掉,并将行内容修改为 localhost 改成:*

listen_addresses = ’*

默认只接受来自本机localhost的连接请求,* 允许数据库服务器监听来自任何主机的连接请求。

2、设置防火墙

首先,执行exit命令,退出postgres用户,再执行一次exit,退出容器。然后才可以进行防火墙设置。

1)、检查 firewalld 启动状态

systemctl status firewalld

在这里插入图片描述
若未启动,则执行启动命令:

systemctl start firewalld

2)、检查 firewall-cmd 运行状态

firewall-cmd --state

在这里插入图片描述

3)、防火墙正常,则分别执行以下命令,进行配置

firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --reload

在这里插入图片描述
重启防火墙

systemctl stop firewalld.service
systemctl start firewalld.service

六、用pgAdmin来Add New Server,进行验证即可。

在这里插入图片描述
在这里插入图片描述
至此,postgresql数据库安装完成,

你可能感兴趣的:(Docker,Postgresql,数据库,linux,centos,docker)