解决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 ...
随机推荐
- 安装 docker-registry-frontend
拉取镜像 最新的V2 docker pull konradkleine/docker-registry-frontend:v2 创建 docker-compose.yml version: ' se ...
- 《Python编程从0到1》笔记3——欧几里得算法
本节以欧几里得算法(这是人类历史上最早记载的算法)为示例,向读者展示注释.文档字符串(docstring).变量.循环.递归.缩进以及函数定义等Python语法要素. 欧几里得算法:“在数学中, ...
- 问题记录 | 记录PIL中Image.save的一个坑
Image.save然后open数值是会变的 我找了一个下午终于找出问题所在,PIL的Image库中把图片resize了之后存在本地然后再读进来,与直接resize后的数值是不一样的. data_va ...
- openvswitch安装与使用
wget http://openvswitch.org/releases/openvswitch-2.4.1.tar.gz tar -xvf openvswitch-2.4.1.tar.gz cd o ...
- Hive-Container killed by YARN for exceeding memory limits. 9.2 GB of 9 GB physical memory used. Consider boosting spark.yarn.executor.memoryOverhead.
Caused by: org.apache.spark.SparkException: Job aborted due to stage failure: Task times, most recen ...
- [转帖]yum 下载rpm包 之前不知道具体的存放路径.
使用Yum下载RPM包-进击的二狗子-51CTO博客 https://www.2cto.com/os/201905/807225.html yumdownloader 命令 yum install y ...
- [转帖]VMWare官网:无法关闭 ESXi 主机上的虚拟机 (1014165)
无法关闭 ESXi 主机上的虚拟机 (1014165) https://kb.vmware.com/s/article/1014165?lang=zh_CN Last Updated: 4/17/20 ...
- Luogu P2572 序列操作
(是道线段树好题√) 题目链接 题外话:这道题我也不知道卡了自己多少天,从初赛之前就开始做,一直到现在才a掉(时间跨度得有将近十天了吧?) 线段树,嗯,好像很简单的样子. 但事实上因为自己太菜了,卡了 ...
- static 和extern关键字
static是C++中常用的修饰符,它被用来控制变量的存贮方式和可见性.extern "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话 ...
- Appium+Python之获取toast
思考:手机APP上的必填或错误文本提示一般1-2s就会消失,比较难定位,所以一般的固定元素定位方式是不可用的,那我们如何定位toast呢? 前提:1.Appium1.6.3以上(包括1.6.3) 2. ...