如何检查 docker 卷中的 postgres 数据库?

Cha*_* Wu 9 postgresql docker

我按照prisma.io的教程开始构建本地服务器。

跟着docker-compose.yml

version: '3'
services:
  prisma:
    image: prismagraphql/prisma:1.34
    restart: always
    ports:
      - '4466:4466'
    environment:
      PRISMA_CONFIG: |
        port: 4466
        databases:
          default:
            connector: postgres
            host: postgres
            port: 5432
            user: prisma
            password: prisma
  postgres:
    image: postgres:10.3
    restart: always
    environment:
      POSTGRES_USER: prisma
      POSTGRES_PASSWORD: prisma
    volumes:
      - postgres:/var/lib/postgresql/data
volumes:
  postgres: ~
Run Code Online (Sandbox Code Playgroud)

我构建了两个docker容器,一个是prisma服务器,另一个是postgres数据库。

正如我所想,在命令之后,prisma depoly模型用户应该在数据库中创建一个用户表。

但我尝试检查数据库中的架构并得到结果:

docker exec -it myContainer psql -U prisma
postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 prisma    | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
(4 rows)
prisma=# \z // or postgres=# \z

                            Access privileges
 Schema | Name | Type | Access privileges | Column privileges | Policies
--------+------+------+-------------------+-------------------+----------
(0 rows)

prisma=# \dt or postgres=# \dt
Did not find any relations.
Run Code Online (Sandbox Code Playgroud)

然后我尝试检查VM机器中的卷文件夹

docker run -it --rm --privileged --pid=host justincormack/nsenter1
/var/lib/docker/volumes/first_prisma_postgres/_data # ls
PG_VERSION            pg_commit_ts          pg_ident.conf         pg_notify             pg_snapshots          pg_subtrans           pg_wal                postgresql.conf
base                  pg_dynshmem           pg_logical            pg_replslot           pg_stat               pg_tblspc             pg_xact               postmaster.opts
global                pg_hba.conf           pg_multixact          pg_serial             pg_stat_tmp           pg_twophase           postgresql.auto.conf  postmaster.pid
Run Code Online (Sandbox Code Playgroud)

数据确实存在于虚拟机中,但是如何查看数据或从中进行转储备份呢?

kar*_*nod 9

一旦连接到容器中的 postgres,您就可以执行正常的查询。

例子:

\l显示所有架构

\dt显示所有表。

也许连接到数据库是您所缺少的。

运行 -\c schema_name连接到数据库

连接后,您可以执行任何正常查询。