【随笔记】Docker安装postgres数据库详细记录

详细记录在macOS下的Docker环境中安装postgres数据的详细过程,记录安装步骤及出现的问题。


postgres安装

首先使用命令进行postgres的镜像拉取

$ docker pull postgers
Using default tag: latest
latest: Pulling from library/postgres
5eb5b503b376: Pull complete
daa0467a6c48: Pull complete
7cf625de49ef: Pull complete
bb8afcc973b2: Pull complete
c74bf40d29ee: Pull complete
2ceaf201bb22: Pull complete
1255f255c0eb: Pull complete
d27501cd0cca: Pull complete
ff5b6d09a5d0: Pull complete
f635aec27645: Pull complete
a165c6729250: Pull complete
b0aa4f86b611: Pull complete
9efc4664d9d2: Pull complete
Digest: sha256:3162a6ead070474b27289f09eac4c865e75f93847a2d7098f718ee5a721637c4
Status: Downloaded newer image for postgres:latest
docker.io/library/postgres:latest

安装成功后,可以进行构建容器

还是通过images进行查看一下

$ docker images -a
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
postgres              latest    da2cb49d7a8d   2 weeks ago     374MB
portainer/portainer   latest    580c0e4e98b0   10 months ago   79.1MB

记录下posgres的IMAGE ID da2cb49d7a8d

docker run -it --name postgres --restart always -e POSTGRES_PASSWORD='123456' -e ALLOW_IP_RANGE=0.0.0.0/0 -v /Users/bird/postgres/data:/var/lib/postgresql -p 5433:5432 -d da2cb49d7a8d
  1. -it:后台运行
  2. -p:端口映射
  3. -v:本地目录与容器内目录映射,本地目录/home/postgres/data需要在本地真实存在
  4. -e:环境变量,设置数据库密码,合允许所有IP访问

使用docker ps进行查看

docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS        PORTS                    NAMES
4e2f4c61b114   da2cb49d7a8d   "docker-entrypoint.s…"   2 seconds ago   Up 1 second   0.0.0.0:5433->5432/tcp   postgres
47b0e9e81d4f   580c0e4e98b0   "/portainer"             3 hours ago     Up 3 hours    0.0.0.0:9000->9000/tcp   portainer

这个时候可以看到容器已经运行了,但是使用数据库还是不能进行访问的,这里还需要进入容器中,进行配置文件的修改

postgres 配置

进入启动的容器中,并切换成postgres用户登录

$ docker exec -it 4e2f4c61b114 bash
root@4e2f4c61b114:/# su postgres
postgres@4e2f4c61b114:/$

可以看到已经成功的切换成postgres用户了,下面就是输入用户名、密码进行登录(密码就是在创建容器时,通过-e进行设置的那个,我这里设置的是123456)

postgres@4e2f4c61b114:/$ psql -U postgres -W
Password:
psql (14.1 (Debian 14.1-1.pgdg110+1))
Type "help" for help.

postgres=#

可以看到已经登录到数据库中了。这里基本上就算是安装成功了。

配置postgres远程访问

上面已经可以在容器内部使用postgres数据库了,但容器外面是不能访问的。回想我们在windows或者linux下面进行的postres数据库安装,都是需要在修改pg_hba.conf、postgresql.conf配置文件的,在docker里面也是相同的操作。

  1. 修改postgres配置文件:pg_hba.conf
postgres@4e2f4c61b114:/$ vi /var/lib/postgresql/data/pg_hba.conf
bash: vi: command not found

直接修改提示没有vi命令,那么就将这个文件copy出去在进行修改吧

docker cp 4e2f4c61b114:/var/lib/postgresql/data/pg_hba.conf ~/

这里需要注意一下,这个命令是在docker本地执行的,不是在容器内部,需要exit退出容器(如果是跟随我上面的操作步骤,需要exit两次,第一次是退出postgresql,第二次是退出容器)

然后再本地可以看到复制出来的文件pg_hba.conf

$ vi pg_hba.conf

老规矩将IPv4的127.0.0.1 修改为0.0.0.0 wq保存即可,然后再将这个文件替换进容器内

# IPv4 local connections:
host    all             all             0.0.0.0/32              trust
host    all             all             0.0.0.0/32               md5

host 参数表示安装PostgreSQL的主机

all第一个all 表示该主机上的所有数据库实例

all 第二个all 表示所有用户

0.0.0.0/32 表示需要连接到主机的IP地址,32表示IPV4

md5 表示验证方式

$ docker cp ~/pg_hba.conf 4e2f4c61b114:/var/lib/postgresql/data
  1. 修改postgres配置文件:postgresql.conf

具体操作步骤与上面的一样。定位到 #listen_addresses = ’localhost’,再将行开头都#去掉,并将行内容修改为 localhost 改成:*(我这里省略了这个步骤,因为我安装的版本这里默认就是允许任何主机连接请求)

listen_addresses = ’*’

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值