如何使用 postgres docker 镜像保存数据?

2024-02-04

我试图让我的数据保留在 /home/me/redmine 中,这样当我的容器停止时,不会丢失数据。我正在使用官方的 postgres docker hub 镜像。

问题是,每次我启动 postgres 容器时,它都会立即退出。当我将“数据”附加到 /var/lib/postgresql 时,这个问题就开始了,否则,如果不添加“数据”,它就会启动,但我的数据没有被保存。另外,我在主机上的路径是/var/lib/postgresql/9.4/data,但图像页面显示使用/var/lib/postgresql/data。

以下是我尝试从主机启动/安装卷的方法:

docker run --name postgres -d   \
    --env='DB_NAME=redmine_production' \
    --env='DB_USER=redmine' \
    --env='DB_PASS=secret' \
    --volume=/home/me/redmine/postgresql:/var/lib/postgresql/data \
    postgres

...然后我将链接redmine如下...

docker run -d -p 3000:3000 --name redmine \
    -v /home/me/redmine/files:/usr/src/redmine/files \
    --link postgres:postgres redmine

在 redmine 容器中, /home/me/redmine/files 卷是一个单独的目录,我试图在其中保存除 Postgres 数据库中的文件之外的文件。

Edit:

当我 cd 进入主机 /var/lib/postgresql 目录时,我在其中找到 9.4/data,然后看到所有者和组未在我的 /etc/passwd 或 /etc/groups 中列出,想知道这是否没有与问题无关。

/var/lib/postgresql/9.4/data # ls -la
total 88
drwx------ 18   70   70 4096 Aug 13  2015 .
drwxr-xr-x  3 root root 4096 Mar 28  2015 ..
drwx------  8   70   70 4096 Jul  2  2015 base
drwx------  2   70   70 4096 Jul  2  2015 global
drwx------  2   70   70 4096 Mar 28  2015 pg_clog
drwx------  2   70   70 4096 Mar 28  2015 pg_dynshmem
lrwxrwxrwx  1 root root   31 Mar 28  2015 pg_hba.conf -> /etc/postgresql-    9.4/pg_hba.conf
lrwxrwxrwx  1 root root   33 Mar 28  2015 pg_ident.conf -> /etc/postgresql-9.4/pg_ident.conf
drwx------  4   70   70 4096 Mar 28  2015 pg_logical
drwx------  4   70   70 4096 Mar 28  2015 pg_multixact
drwx------  2   70   70 4096 Jul  2  2015 pg_notify
drwx------  2   70   70 4096 Mar 28  2015 pg_replslot
drwx------  2   70   70 4096 Mar 28  2015 pg_serial
drwx------  2   70   70 4096 Mar 28  2015 pg_snapshots
drwx------  2   70   70 4096 Aug 13  2015 pg_stat
drwx------  2   70   70 4096 Aug 13  2015 pg_stat_tmp
drwx------  2   70   70 4096 Mar 28  2015 pg_subtrans
drwx------  2   70   70 4096 Mar 28  2015 pg_tblspc
drwx------  2   70   70 4096 Mar 28  2015 pg_twophase
-rw-------  1   70   70    4 Mar 28  2015 PG_VERSION
drwx------  3   70   70 4096 Mar 28  2015 pg_xlog
-rw-------  1   70   70   88 Mar 28  2015 postgresql.auto.conf
lrwxrwxrwx  1 root root   35 Mar 28  2015 postgresql.conf -> /etc/postgresql-9.4/postgresql.conf
-rw-------  1   70   70 1626 Aug 13  2015 postmaster.log
-rw-------  1   70   70  114 Jul  2  2015 postmaster.opts

想法?


首先,这些环境变量看起来很可疑。看看官方 Docker 镜像的文档 https://hub.docker.com/_/postgres/,并注意你需要POSTGRES_DB, POSTGRES_USER, and POSTGRES_PASSWORD, 而不是DB_NAME, DB_USER, and DB_PASS.

除此之外,你似乎大部分都走在正确的轨道上。这是一个完整的示例:

首先,我启动一个 Postgres 容器。我将持久存储定位在我的主目录之外的某个位置,因为正如您已经注意到的那样,文件不会归您所有,这可能会在您的主目录中造成混乱(尽管不一定有问题):

docker run --rm --name postgres \
  -v /tmp/postgres:/var/lib/postgresql/data \
  -e POSTGRES_DB=larstest \
  -e POSTGRES_USER=lars \
  -e POSTGRES_PASSWORD=secret postgres

由于这是我第一次启动 postgres 指向该数据目录,我们将看到它初始化数据库:

The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok

Success. You can now start the database server using:

现在,从另一个窗口,我可以连接到它......

$ psql -h 172.17.0.4 -U lars larstest
Password for user lars: 
psql (9.5.4, server 9.6.0)
WARNING: psql major version 9.5, server major version 9.6.
         Some psql features might not work.
Type "help" for help.

...并创建一些数据:

larstest=# create table testtable (id integer);
CREATE TABLE
larstest=# insert into testtable values (1);
INSERT 0 1
larstest=# select * from testtable;
 id 
----
  1
(1 row)

现在,我退出容器:

^CLOG:  received fast shutdown request
LOG:  aborting any active transactions
FATAL:  terminating connection due to administrator command
LOG:  autovacuum launcher shutting down
LOG:  shutting down
LOG:  database system is shut down

我们可以验证它是否不再运行:

$ docker ps | grep postgres

但是如果我们使用相同的命令行参数再次启动它;

docker run --rm --name postgres \
  -v /tmp/postgres:/var/lib/postgresql/data \
  -e POSTGRES_DB=larstest \
  -e POSTGRES_USER=lars \
  -e POSTGRES_PASSWORD=secret postgres

我们看到它没有初始化数据库,因为它已经存在,并直接跳到:

LOG:  database system was shut down at 2016-10-21 03:13:50 UTC
LOG:  MultiXact member wraparound protections are now enabled
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started

此时,我们可以重新连接数据库,发现我们的数据仍然存在:

$ psql -h 172.17.0.2 -U lars larstest
Password for user lars: 
psql (9.5.4, server 9.6.0)
WARNING: psql major version 9.5, server major version 9.6.
         Some psql features might not work.
Type "help" for help.

larstest=# select * from testtable;
 id 
----
  1
(1 row)

这几乎就是全部内容了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 postgres docker 镜像保存数据? 的相关文章

  • 如何解决postgresql中group by和聚合函数的问题

    我正在尝试编写一个查询来划分两个 SQL 语句 但它显示了我 ERROR column temp missed must appear in the GROUP BY clause or be used in an aggregate fu
  • mysql_upgrade 失败 - innodb 表不存在?

    我正在将 mysql 5 5 docker 容器数据库升级到 mysql 5 6 docker 容器 我能够解决所有其他问题 最后我的服务器运行的是 5 6 但是当我运行 mysql upgrade 时出现以下错误 ERROR root 1
  • Django 全文搜索优化 - Postgres

    我正在尝试利用 Django v2 1 和 Postgres 9 5 创建一个地址自动完成功能的全文搜索 但性能目前不适合自动完成 我不明白逻辑我得到的绩效结果背后 就信息而言 该表相当大 有 1400 万行 我的型号 from djang
  • 从 gitlab docker runner 启动声纳扫描仪

    我有一个 CI 工作流程 集成了 linting 作业和代码质量作业 我的 Linting 工作是一个 docker runner 从应用程序代码启动我的 eslint 脚本 然后我的代码质量工作应该启动声纳扫描仪泊坞窗实例 检查我的代码并
  • 在 Postgres 中以周为单位分割间隔

    这是另一个关于日期的 SQL 问题 我正在使用 PHP 和 Postgres 构建一个日历应用程序 它将显示几天 几周甚至几个月的事件 每个事件都有开始日期和结束日期 按范围选择它们不是问题 然而 如果 Postgres 可以在每周的第一天
  • 尝试解码 JSON 日期时显示“JSON 写入中的类型无效 (__NSTaggedDate)”

    当我尝试从具有日期变量的数据库中解码 JSON 对象时 出现错误 由于未捕获的异常 NSInvalidArgumentException 而终止应用程序 原因 JSON 写入中的无效类型 NSTaggedDate 错误发生在以下代码行 le
  • docker 容器中的 nmcli

    我目前正在寻找在 docker 容器中运行 nmcli nmcli 在我的主机上工作得很好 但如果我启动一个特权容器 nmcli 就不起作用 启动我的容器 sudo docker run privileged net host it ima
  • 打印 sqlalchemy 行

    我想做的就是打印 sqlalchemy 表行的一行 假设我有 from sqlalchemy import Column Integer String from sqlalchemy ext declarative import decla
  • PostgreSQL 触发器不返回任何内容

    我在创建时有一个 PostgreSQL 触发器 它基本上将插入重定向到子表中 插入记录后 我想中止请求以避免重复数据 据我所知 执行此操作的唯一方法是返回NULL在触发器中 问题是我需要返回记录才能获取 ID 如果我回来NULL 我得到 N
  • 在 PostgreSQL 中进行 DROP 时,避免引用表上的独占访问锁

    为什么在 PostgreSQL 中删除表需要ACCESS EXCLUSIVE锁定任何引用的表 我怎样才能将其减少到ACCESS SHARED锁还是根本不锁 即有没有办法在不锁定引用表的情况下删除关系 我在文档中找不到任何提及需要哪些锁 但是
  • 在 Docker 中运行 Keycloak 时出错

    我试图在 Docker 中运行 Keycloak 但它抛出一个错误 这是泊坞窗文件 FROM jboss keycloak 4 1 0 Final WORKDIR opt jboss keycloak COPY realm export j
  • 如何从 docker-compose 链接到 Amazon RDS

    我的 docker compose yml 看起来像这样 django build user django links LINK TO AMAZON RDS command gunicorn sh env file config setti
  • Postgres UUID 和休眠

    我有一个具有 UUID 列的实体 它不是主键 我正在使用 Postgres 和 hibernate 我对此专栏的类型是https www postgresql org docs 9 1 static datatype uuid html h
  • 按名称删除 jsonb 数组项

    我有下表 CREATE TABLE country id INTEGER NOT NULL PRIMARY KEY name VARCHAR 50 extra info JSONB INSERT INTO country id extra
  • WordPress docker 的 nginx ssl 反向代理不会加载资源和 css

    最近我用docker配置了wordpress站点 它在端口8080上运行 然后我在主机上配置了nginx反向代理 一切都很好 但在我添加ssl站点之后不久 就无法加载itz css 并且我找不到错误 server server name m
  • 使用 ecs-cli 在 AWS 上部署 docker 时遇到问题

    我在 ECS 上有一个存储库 已使用 ecs cli 创建了一个集群 ecs cli configure region us west 2 profile
  • 如何将新的 Kubernetes Minion 添加到当前集群

    我有一个运行在 3 台服务器上的 Kubernetes 集群 一台主服务器和 2 台服务器 我想添加另一个小黄人 是否可以添加 Minion 而无需再次进行完整安装 到目前为止 在寻找执行此操作的指南时 我只能找到有关建立整个集群的优秀指南
  • 如何使用flyway将数据从一个DB迁移到另一个DB?

    我在不同的服务器上有两个 postgreSql DB 比如说 A 和 B 我可以使用 Flyway 一些如何将所有数据从 DB A 复制到新设置且为空的 B 如果有人指出我正确的方向和工具 这将很有帮助 要求是通过某种工具自动化将数据从一个
  • 如何从最新版本的 Ubuntu (18.10) 运行使用 SystemD 的 Docker 容器?

    我正在尝试执行使用 ubuntu latest 构建的 Docker 映像 并且在运行容器时不断收到 SystemD 错误消息 System has not been booted with systemd as init system P
  • 如何通过 SSL 从 Phoenix Web App 连接到 PostgreSQL?

    When trying to run Elixir Phoenix Web Application using PostgreSQL Database hosted 3rd party Database as a Service Azure

随机推荐

  • 如何使用多线程进行zlib压缩(相同输入源)

    我的目标是在并行线程中压缩同一源的数据 我已经定义了列表中的作业 这些作业具有读取信息 每个作业中 500kb 1MB 我的压缩器线程将使用 ZLIB 压缩每个块的数据并将其存储在相应作业的 outbuf 中 现在 我想合并所有这些并创建一
  • 如何检测用户是否在浏览器中启用了全屏

    当用户在 Chrome 或 FireFox 中启用全屏时 是否会触发一些 JavaScript 事件 我有 WebGL 应用程序 画布宽度和高度设置为一定大小 当用户启用全屏时 我想调整其大小 如果没有这样的事件 我是否应该开始研究用画布填
  • 如何在 PyQt5 中使用全局键盘快捷键显示 QMenu?

    我试图通过热键 例如 F1 显示 QMenu 实例PyQt5 然后我找到了这个包keyboard https pypi org project keyboard 尝试像这样使用它 keyboard add hotkey F1 self sh
  • 将 HTML 表转换为 JSON

    我正在尝试将通过 BeautifulSoup 提取的表转换为 JSON 到目前为止 我已经成功隔离了所有行 但我不确定如何使用这里的数据 任何建议将非常感激 tr td strong Balance strong td td strong
  • WP8.1后退按钮退出应用程序

    上次我针对 Windows Phone 进行开发时使用的是版本 8 现在我正在使用 8 1 也许这是微软的一项新功能 但是当我按下手机上的后退按钮时 无论我对应用程序的了解有多深 应用程序都会最小化 这真的很烦人 有什么我可以做的吗 提前谢
  • 自动填充子图

    我正在编写一个 python 脚本 该脚本将 1 获取每个子图的 y 值列表 以针对一组通用的 x 值进行绘制 2 将每个子图设为散点图并放置将其放置在子图网格中的适当位置 并且 3 针对不同大小的子图网格完成这些任务 第三个语句的意思是
  • 我是否需要更改 xml 代码以支持所有屏幕尺寸的 Android 设备?

    我已经为不同的屏幕尺寸创建了布局 这是我的默认布局的 xml 代码 但所以任何人请告诉我应该做什么来支持任何屏幕尺寸的 Android 设备的布局 我需要更改我的 xml 代码吗 或者 只是我需要修改我的xml代码吗 请告诉我 以便我解决我
  • Python 2.7 的 Shebang 线

    我已经在我的Linux Centos中安装了Python2 7 它默认安装了Python2 6 默认Python root linuxhost PythonProjects python V Python 2 6 6 默认Python2 7
  • 错误:找不到字段的设置器。 - java.util.ArrayList 中的大小 - Room 中的嵌入式 ArrayList 无法编译

    我在将 Android 4 1 2 更新到 4 2 2 后收到此错误消息 但在将 Android Studio 更新到 4 1 2 以上的任何版本后收到此错误消息 What went wrong Execution failed for t
  • 如果模型实现了 INotifyPropertyChanged,ViewModel 应该如何注册/取消注册 PropertyChanged 事件?

    我有一个实现的模型INotifyPropertyChanged并且它可能会被后台业务线程更新 其相关ViewModel也实现了INotifyPropertyChanged 他们的 View 显然绑定到 ViewModel 该视图可能会显示在
  • 合并两个数据框,两者的坐标都基于最近的位置

    我有一个包含局部变量的大型数据框 约 130000 行 和另一个包含物种密度的大型数据框 约 7000 行 两者都有 x 和 y 坐标 但这些坐标并不总是匹配 例如 df1 lt data frame X c 2 4 1 2 5 Y c 6
  • Django Rest Framework - 注册后返回用户 ID 和令牌

    我尝试注册用户并返回令牌和用户 ID 像这样做 from django shortcuts import render from rest framework response import Response from rest frame
  • APL、A、J、K?

    数组语言的景观虽然令人着迷 但也令人困惑不已 有理由选择 J 或 K 或 APL 或 A 之一吗 这些选项似乎都不是开源的 有开源版本吗 我很想拓展我的思维 但我仍然感到困惑 这些语言之间的差异相对微妙 APL 正确 具有原始符号表示法的优
  • 优化求和函数 - GEKKO

    我刚刚开始学习优化 在寻找以下问题的最佳值时遇到一些问题 注意 这只是我想到的一个随机问题 没有实际应用 Problem where x可以是列表中的任何值 2 4 6 并且y介于 1 和 3 之间 我的尝试 from gekko impo
  • window.open 和 $(document).ready

    我正在尝试制作一个打开弹出窗口的书签 该窗口内有一个 CSS 类列表 一旦选择 该对象就会突出显示window opener页 所以我遇到了两个问题 Firebug 在弹出窗口中不起作用 所以我看不到发生了什么 窗口永远不会完成加载 至少我
  • 如何在Gulp中将CSS文件的内容注入到HTML中? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要将样式表的内容插入到HTML 页面的 我怎样才能在 Gulp 中做到这一点 之前 我所拥有的 之
  • wicked_pdf 图像渲染

    如何获取产品图像并以 PDF 格式显示 我在视图文件中有这段代码 div div 它显示了这辆车的所有图像 但如果我在 show pdf erb 中使用相同的代码 那么我得到的不是图像而是问号 就像图像丢失的东西一样 那么 有没有办法把它们
  • 如何使量角器中的自动化测试脚本等待,直到页面完全加载

    不 但是真的 我知道这个通用问题已被问过数千次 但有一些更具体的问题对我来说看起来可行 因此我想知道如何实现它 问题 我正在测试一个有角度的应用程序量角器 https www protractortest org api 在应用程序内部 我
  • C 中指针的类型转换

    我知道指向一种类型的指针可以转换为另一种类型的指针 我有三个问题 类型转换指针时应记住什么 结果指针可能出现哪些异常 错误 避免异常 错误的最佳实践是什么 编写良好的程序通常不会使用太多指针类型转换 可能需要使用 ptr 类型转换mallo
  • 如何使用 postgres docker 镜像保存数据?

    我试图让我的数据保留在 home me redmine 中 这样当我的容器停止时 不会丢失数据 我正在使用官方的 postgres docker hub 镜像 问题是 每次我启动 postgres 容器时 它都会立即退出 当我将 数据 附加