解决postgresql在docker中无法保存状态的问题

PS:最佳解决方式是将目录挂载到宿主机,容器出问题了,数据还在,以下方式容器出问题会丢失数据,以下思想只供参考!!!

  用过docker的人都知道,docker是不适合来放数据库的,这也不是绝对的。如果你在docker中放postgresql数据库,肯定会碰到这个问题,数据库状态无法保存。如果断电了,或是docker commit后,发现数据的数据全没了。在网上查过不少相关资料,都没有很好的解决这个问题。我用的postgresql是9.6版本的,以下是我的解决方法。

  postgresql初始化后,数据库的位置默认在:/var/lib/postgresql/data,这个目录下的数据在commit的时候是不会保存的。所以在数据库初化的时候指定新的位置,这样数据库的文件就不会丢失了。比如根目录下:/postgresql/data (可能会碰到权限问题,先用root帐户新建postgresql目录,然后切到postgres帐户创建data目录)。

  步骤:

  1、数据库初始化的命令是:/usr/lib/postgresql/9.6/bin/pg_ctl init --pgdata=/postgresql/data。

  2、启动数据库命令:/usr/lib/postgresql/9.6/bin/pg_ctl start  --pgdata=/postgresql/data。

  3、制作登录执行命令:

    写一个可执行脚本postgresql.sh,放在/bin目录下,然后修权限(chmod 777 /bin/postgresql.sh)内容如下:

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

    #!/bin/bash
    su postgres <<EOF
    /usr/lib/postgresql/9.6/bin/pg_ctl start --pgdata=/postgresql/data;
    exit;
    EOF
    /bin/bash

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

  4、制作新的镜像:

  ctrl+D退出后执行下面的命令:

  docker commit.........

  得到一个新的镜像包。

  5、开启新的容器

  docker run \

  -it \

   --name  postgresql \

  -p 5432:5432 \

  postgresql:1.0.0 \

  /bin/postgresql.sh 

  特别注意:是/bin/postgrsql.sh而不是/bin/bash,这样postgresql数据就是启动了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以按照以下步骤在Docker安装PostgreSQL: 1. 首先,确保你已经安装了DockerDocker Compose。如果还没有安装,可以参考官方文档进行安装。 2. 创建一个新的文件夹,用于存放PostgreSQL的配置文件和数据。在该文件夹创建一个名为docker-compose.yml的文件,并将以下内容添加到文件: ```yaml version: '3.7' services: db: image: postgres restart: always environment: POSTGRES_USER: your_username POSTGRES_PASSWORD: your_password POSTGRES_DB: your_database_name volumes: - ./data:/var/lib/postgresql/data ports: - 5432:5432 ``` 注意替换`your_username`、`your_password`和`your_database_name`为你想要设置的用户名、密码和数据库名。 3. 保存并关闭文件,然后在终端导航到该文件夹,并运行以下命令启动PostgreSQL容器: ```bash docker-compose up -d ``` 这将下载PostgreSQL镜像并在后台运行容器。等待一段时间,直到容器启动完成。 4. 现在,你可以使用任何支持PostgreSQL的客户端连接到数据库。在连接时,使用以下参数: - 主机:localhost - 端口:5432 - 用户名:你在docker-compose.yml文件设置的用户名 - 密码:你在docker-compose.yml文件设置的密码 - 数据库:你在docker-compose.yml文件设置的数据库名 这样就可以在Docker成功安装和运行PostgreSQL了。记得定期备份你的数据文件(位于你选择的文件夹data子文件夹),以防止数据丢失。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值