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