【随笔记】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
- -it:后台运行
- -p:端口映射
- -v:本地目录与容器内目录映射,本地目录/home/postgres/data需要在本地真实存在
- -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里面也是相同的操作。
- 修改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
- 修改postgres配置文件:postgresql.conf
具体操作步骤与上面的一样。定位到 #listen_addresses = ’localhost’,再将行开头都#去掉,并将行内容修改为 localhost 改成:*(我这里省略了这个步骤,因为我安装的版本这里默认就是允许任何主机连接请求)
listen_addresses = ’*’
默认只接受来自本机localhost的连接请求,* 允许数据库服务器监听来自任何主机的连接请求。