如何在Docker卷中检查PostgreSQL数据库?

7

我按照 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: ~

我搭建了两个 Docker 容器,一个是 Prisma 服务器,另一个是 PostgreSQL 数据库。
我以为在运行了 prisma deploy 命令后,模型 User 应该会在数据库中创建一个用户表格。
但是当我尝试检查数据库中的模式时,得到的结果是:
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.

然后我尝试检查虚拟机中的音量文件夹

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

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

2个回答

8

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

例如:

\l 显示所有模式

\dt 显示所有表格。

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

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

一旦连接成功,您就可以执行任何正常的查询。


在输入\l命令后,有四个数据库返回postgresprismatemplate 0(1)。我通过使用\c\d检查了每个数据库,并且所有操作都返回了did not find any relations - Champer Wu
一旦你这样做了,\l 然后执行 \c 或 \connect database_name; - 现在你就连接到了数据库。接着你可以进行查询操作。 - karikevinod
是的,我已经尝试过\c postgres\c prisma,然后每个连接我也运行了\d\z。所有的响应都是空的。 - Champer Wu
但是我使用了curl来调用数据库API,数据响应为JSON格式{data:{users:[{id: 1, content: "blablabla"}]}} - Champer Wu
1
我首先会确认Prisma容器是否能够连接到Postgres容器。您可以尝试通过执行“docker logs --follow <container_name>”来检查日志,看看它是否有任何数据库连接错误。 - prithajnath
显示剩余3条评论

2

要检查所有卷,您可以运行:

docker volume ls

要检查其中之一:

docker volume inspect postgres_db

其中postgres_db是您的卷的名称

结果可能会显示类似于以下内容:

[
  {
    "CreatedAt": "2022-05-05T14:24:04Z",
    "Driver": "local",
    "Labels": {
        "com.docker.compose.project": "s-deployment",
        "com.docker.compose.version": "2.4.1",
        "com.docker.compose.volume": "postgres_db"
    },
    "Mountpoint": "/var/lib/docker/volumes/s-deployment_postgres_db/_data",
    "Name": "s-deployment_postgres_db",
    "Options": null,
    "Scope": "local"
  }
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接