解决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数据就是启动了。
解决postgresql在docker中无法保存状态的问题的更多相关文章
- 【docker】【redis】2.docker上设置redis集群---Redis Cluster部署【集群服务】【解决在docker中redis启动后,状态为Restarting,日志报错:Configured to not listen anywhere, exiting.问题】【Waiting for the cluster to join...问题】
参考地址:https://www.cnblogs.com/zhoujinyi/p/6477133.html https://www.cnblogs.com/cxbhakim/p/9151720.htm ...
- android中正确保存view的状态
英文原文: http://trickyandroid.com/saving-android-view-state-correctly/ 转载此译文须注明出处. 今天我们聊一聊安卓中保存和恢复view状 ...
- 在C 函数中保存状态:registry、reference和upvalues
在C函数中保存状态:registry.reference和upvalues C函数能够通过堆栈来和Lua交换数据,但有时候C函数须要在函数体的作用域之外保存某些Lua数据.那么我们想到全局变 ...
- gitlab docker中postgresql远程访问配置
1.配置postgresql远程访问 配置postgresql远程访问,需要修改两个文件,在gitlab-ce的docker中位置为 /var/opt/gitlab/postgresql/data 首 ...
- 程序中保存状态的方式之Cookies
程序中保存状态的方式之 Cookies,之前写过一篇关于ViewState的.现在继续总结Cookies方式的 新建的测试页面login <%@ Page Language="C#&q ...
- 程序中保存状态的方式之ViewState
程序中保存状态的方式有以下几种: 1.Application 2.Cookie 3.Session 4.ViewState:ViewState是保存状态的方式之一,ViewState实际就是一个Hid ...
- 在c中保存状态
1. 注册表 注册表是一个普通的table,我们可以将c函数中需要保存的状态都存储在注册表中,注册表是可以被多个c模块共享的. 由于注册表是一个普通table,我们同样可以在栈中对其进行操作,只是这个 ...
- docker中,如何将镜像保存为tar文件或者将镜像保存为文件,将tar文件导入到docker中
需求说明: 在实际使用docker的过程中,比如某些机器不能上网,恰巧需要某些docker镜像,一般可以采用在能上网的机器上,pull下来基础镜像,然后将docker 镜像保存为文件,在不能上网的机器 ...
- 解决docker中使用nginx做负载均衡时并发过高时的一些问题
# 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...
随机推荐
- Dojo入门:初识Dojo
Dojo的全称是Dojo Toolkit,始创于2004年,是当前各种蓬勃发展的JS工具包中的佼佼者.Dojo 为富互联网应用程序(RIA) 的开发提供了完整的端到端的解决方案,包括核心的 Jav ...
- java:Spring框架1(基本配置,简单基础代码模拟实现,spring注入(DI))
1.基本配置: 步骤一:新建项目并添加spring依赖的jar文件和commons-logging.xx.jar: 步骤二:编写实体类,DAO及其实现类,Service及其实现类; 步骤三:在src下 ...
- Django 中 ModelForm 的使用
定义 ModelForm 定制 ModelForm Meta 在 Form 中另外定义 Field 值得一提的一些 Field 转化 AutoField BooleanField ForeignKey ...
- 【Qt开发】QT中用函数把float转化成QString
QT中用函数把float转化成QString 最普通的用法,例如: float f; QString str = QString("float is %1").ar ...
- 【Qt开发】QTableWidget设置根据内容调整列宽和行高
QTableWidget要调整表格行宽主要涉及以下一个函数 1.resizeColumnsToContents(); 根据内容调整列宽 ...
- git上传项目到github教程
1 本地下载git 2 进到你项目所在地 3 git init(初始化git仓) 4 git add .(git add <file>将文件添加到git) 5 git commit -m ...
- for循环实现九九乘法表
<!--for循环实现九九乘法表--> <table border="> <tbody> {% for x in range(1,10) %} <t ...
- 第十四周课程总结&&实验总结
课程总结: 1.Java实现跨平台操作的工具:JDBC. 它的意思是java数据库连接,可以方便的实现多种关系型数据库的统一操作,它由一组用java语句编写的类和接口组成. 2.JDBC驱动分类: J ...
- tomcat的相关
[针对tomcat修改,那么就直接找关于tomcat的相关文件目录进行修改即可] 1.对tomcat进行相关的操作,启动tomcat时,让其不要出现tomcat主页,与之相反的让其出现404的界面! ...
- maven坐标Dependencies和Exclusions详解
1.概念介绍 Dependencies:是可选依赖(Optional Dependencies) Exclusions:是依赖排除(Dependency Exclusions) 2.Dependenc ...