当前位置: 首页 > 知识库问答 >
问题:

如何使用带有现有数据的PostgreSQL容器?

华浩壤
2023-03-14

我正在尝试设置一个PostgreSQL容器(https://hub.docker.com/_/Postgres/)。我有一些来自当前PostgreSQL实例的数据。我从/var/lib/PostgreSQL/data中复制了它,并希望将它设置为PostgreSQL容器的卷。

db:
    image: postgres:9.4
    ports:
        - 5432:5432
    environment:
        POSTGRES_PASSWORD: postgres
        POSTGRES_USER: postgres
        PGDATA : /var/lib/postgresql/data
    volumes:
        - /projects/own/docker_php/pgdata:/var/lib/postgresql/data
db_1  | initdb: directory "/var/lib/postgresql/data" exists but is not empty
db_1  | If you want to create a new database system, either remove or empty
db_1  | the directory "/var/lib/postgresql/data" or run initdb
db_1  | with an argument other than "/var/lib/postgresql/data".
FROM postgres:9.4
COPY pgdata /var/lib/postgresql/data

但我得到了同样的错误,我做错了什么?

我使用pg_dumpall获得了SQL,并将其放入/docker-entrypoint-initdb.d中,但每次执行docker-compose up时都会执行该文件。

共有1个答案

郑景胜
2023-03-14

基于Irakli的答案,这里有一个更新的解决方案:

  • 使用较新版本2的Docker撰写文件
  • 分隔
  • 已删除额外设置
version: '2'

services:
  postgres9:
    image: postgres:9.4
    expose:
      - 5432
    volumes:
      - data:/var/lib/postgresql/data

volumes:
  data: {}

启动Postgres数据库服务器:

$ docker-compose up
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'

                         Access privileges
 Schema |   Name    | Type  | Access privileges | Column access privileges 
--------+-----------+-------+-------------------+--------------------------
 public | beer      | table |                   | 
$ docker-compose stop
$ docker-compose up

我们预计数据库服务器将重新使用存储,因此我们非常重要的数据还在那里。检查:

$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
                         Access privileges
 Schema |   Name    | Type  | Access privileges | Column access privileges 
--------+-----------+-------+-------------------+--------------------------
public | beer      | table |                   | 

我们成功地使用了一个新样式的Docker Compose文件来运行一个使用外部数据卷的Postgres数据库,并检查了它是否保证了我们的数据安全可靠。

首先,做一个备份,将我们的数据存储在主机上:

$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
                         Access privileges
Schema |   Name    | Type  | Access privileges | Column access privileges 
--------+-----------+-------+-------------------+--------------------------
public | beer      | table |                   | 

总而言之,我们已经验证了可以启动数据库,数据在重新启动后保持不变,并且可以从主机将备份还原到数据库中。

谢谢托马兹!

 类似资料:
  • 问题内容: 我正在尝试设置PostgreSQL容器(https://hub.docker.com/_/postgres/)。我有一些来自当前PostgreSQL实例的数据。我从复制它,并希望将其设置为PostgreSQL容器的卷。 我的部分来自PostgreSQL的docker-compose.yml文件: 当我制作docker-compose时,我收到以下消息: 我试图从容器创建自己的映像,所以

  • 下面是logcat: 12-15 13:15:30.763 295 33-29533/com.example.hieul.hismartversearch e/androidruntime:致命异常:main process:com.example.hieul.hismartversearch,pid:29533 java.lang.nullpointerexception:试图在Android.

  • 我们有一个使用图形数据库的现有webapplication,我们希望切换到一个使用Axon框架的cqrs的架构。

  • 问题内容: 我使用Vlad Mihalcea的库来将SQL数组(在我的情况下为Postgresql)映射到JPA。然后,假设我有一个实体,例如。 适当的SQL是: 使用QueryDSL,我想获取包含所有给定标签的行。原始SQL可能是: (摘自:https : //www.postgresql.org/docs/9.1/static/functions- array.html ) 可以用QueryD

  • 问题内容: 将XML数据(从网页获得)插入PostgreSQL数据库的最佳方法是什么? 我正在使用Java,需要一些帮助,以找到一种将这些数据读入数据库的好方法。 问题答案: Postgres具有(感谢DanielLyons指出)本机XML支持您可以用来存储表格。但是,如果您想手动切碎XML数据,则有多种可能性可以在数据库中表示XML数据。第一个问题应该是,如果您想要一个非常通用的解决方案,它将能

  • 基本问题是试图使用自定义数据模型来创建用于deeplearning4j网络的DataSetIterator。 我试图使用的数据模型是一个java类,它包含一系列双打,这些双打是从特定股票的报价中创建的,例如时间戳、打开、关闭、高、低、卷、技术指标1、技术指标2等。我查询了一个internet源示例(也是来自同一站点的其他几个指标),它提供了json字符串,我将这些字符串转换为我的数据模型,以便于访