如何在其 docker 容器中执行 psql 交互?

Ben*_*ari 1 django postgresql psql docker docker-compose

我想在 Postgres 交互式 shell 中运行查询。为此,我正在使用 docker 容器,如下所示:

这是 docker-compose 的相关部分:

  db_of_ivms:
    image: postgres:10
    restart: unless-stopped
    ports:
     - 5432:5432
    container_name: db_of_ivms
    environment:
      POSTGRES_PASSWORD: xxx
      POSTGRES_USER: ivms_usr
      POSTGRES_DB: ivms_db
Run Code Online (Sandbox Code Playgroud)

尽管如此,我正在处理这个错误:

docker exec -it -u 0 db_of_ivms bash

# psql

psql: FATAL:  role "root" does not exist
Run Code Online (Sandbox Code Playgroud)

Far*_*ahi 5

你需要 postgres 用户的 shell

docker exec -it -u postgres db_of_ivms bash
Run Code Online (Sandbox Code Playgroud)

现在对于您未指定的容器POSTGRES_USER: ivms_usr

postgres@d9b097b8db8c:/$ psql
postgres=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | 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
(3 rows)

Run Code Online (Sandbox Code Playgroud)

如果您指定POSTGRES_USER: ivms_usr和数据库(注意 psql 命令参数):

docker exec -it -u postgres db_of_ivms bash
postgres@2cec2435bb83:/$ psql -U ivms_usr -d ivms_db
psql (10.12 (Debian 10.12-1.pgdg90+1))
Type "help" for help.

ivms_db=# \l
                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 ivms_db   | ivms_usr | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres  | ivms_usr | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | ivms_usr | UTF8     | en_US.utf8 | en_US.utf8 | =c/ivms_usr          +
           |          |          |            |            | ivms_usr=CTc/ivms_usr
 template1 | ivms_usr | UTF8     | en_US.utf8 | en_US.utf8 | =c/ivms_usr          +
           |          |          |            |            | ivms_usr=CTc/ivms_usr
(4 rows)
Run Code Online (Sandbox Code Playgroud)