zoukankan      html  css  js  c++  java
  • 解决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数据就是启动了。

  • 相关阅读:
    MAC OSX 下 使用openssl 命令 生成RSA公钥和私钥
    iOS 高效开发-----延时执行用GCD
    iOS 高效开发-----实现description 方法 (续)
    iOS 高效开发-----实现description 方法
    ios 高效开发-----字面量
    利用脚本打包的动态库 在打包发布时出现得问题解析 ERROR ITMS-90362等
    打包framework 涉及到得架构问题
    XCode 6 制作framework
    【Mac软件推荐】终端常用者的萌物Go2Shell
    项目总结吧
  • 原文地址:https://www.cnblogs.com/runnerjack/p/7417881.html
Copyright © 2011-2022 走看看