Docker搭建PG数据库
下载镜像
我使用的镜像版本是12.20
docker pull postgres:12.20
检查镜像是否下载完成
docker image ls

编写启动脚本
start-postgres.sh
#!/bin/bash
# 创建WAL文件归档目录并授权
mkdir -p /home/postgres/arch/
chmod +777 /home/postgres/arch/
# 创建日志存放目录并授权
mkdir -p /var/log/postgresql/
chmod +777 /var/log/postgresql/
# 启动程序
su postgres -c "pg_ctl -D /var/lib/postgresql/data -l /var/log/postgresql/pglog.log start"
# 保持容器运行(例如,通过tail命令保持前台进程)
tail -f /var/log/postgresql/pglog.log
脚本授运行权:chmod +x start-postgres.sh
docker-compose.yml
version: '3.8'
services:
postgres2:
image: postgres:12.20
container_name: postgres2
restart: always
environment:
POSTGRES_PASSWORD: abc123
ALLOW_IP_RANGE: 0.0.0.0/0
volumes:
- /root/docker-run/postgres2/data:/var/lib/postgresql/data
- /root/docker-run/postgres2/scripts:/usr/local/bin/scripts
- /root/docker-run/postgres2/logs:/var/log/postgresql
ports:
- "5434:5432"
entrypoint: /usr/local/bin/scripts/start-postgres.sh
/usr/local/bin/scripts/start-postgres.sh 是自定义的启动脚本,主要目的是将日志文件输出方便后面排查问题。
dockerRun.sh
第一次启动时因为执行容器的入口脚本
/usr/local/bin/docker-entrypoint.sh导致没有正常初始化数据库,会出现问题,所以编写该脚本,先初始化一次,然后在执行自定义的脚本
docker stop postgres2
docker rm postgres2
docker run -it --name postgres2 \
--restart always \
-e POSTGRES_PASSWORD='abc123' \
-e ALLOW_IP_RANGE=0.0.0.0/0 \
-v /root/docker-run/postgres2/data:/var/lib/postgresql/data \
-p 0.0.0.0:5434:5432 \
-d postgres:12.20
docker stop postgres2
docker rm postgres2
docker-compose up -d
后面再不删除data的情况下可以使用命令 docker-compose up -d 重建容器
使用 docker ps -a 检查容器是否创建成功
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果