解決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數據就是啟動了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM