关于postgresql:Docker-如何在postgres容器中运行psql命令?

Docker - How can run the psql command in the postgres container?

我想在postgres映像中使用psql以便在数据库上运行一些查询。
但是不幸的是,当我连接到postgres容器时,出现了该错误,找不到psql命令...

对我来说,如何在容器中运行postgre sql查询或命令是一个谜。

如何在postgres容器中运行psql命令? (我是Docker世界中的新手)

我使用Ubuntu作为主机,但没有在主机上安装postgres,而是使用postgres容器。

1
2
3
4
5
6
7
8
docker-compose ps
        Name                       Command               State               Ports            
---------------------------------------------------------------------------------------------
yiialkalmi_app_1        /bin/bash                        Exit 0                              
yiialkalmi_nginx_1      nginx -g daemon off;             Up       443/tcp, 0.0.0.0:80->80/tcp
yiialkalmi_php_1        php-fpm                          Up       9000/tcp                    
yiialkalmi_postgres_1   /docker-entrypoint.sh postgres   Up       5432/tcp                    
yiialkalmi_redis_1      docker-entrypoint.sh redis ...   Up       6379/tcp

这里的容器:

1
2
3
4
5
6
docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
315567db2dff        yiialkalmi_nginx   "nginx -g 'daemon off"   18 hours ago        Up 3 hours          0.0.0.0:80->80/tcp, 443/tcp   yiialkalmi_nginx_1
53577722df71        yiialkalmi_php     "php-fpm"                18 hours ago        Up 3 hours          9000/tcp                      yiialkalmi_php_1
40e39bd0329a        postgres:latest    "/docker-entrypoint.s"   18 hours ago        Up 3 hours          5432/tcp                      yiialkalmi_postgres_1
5cc47477b72d        redis:latest       "docker-entrypoint.sh"   19 hours ago        Up 3 hours          6379/tcp                      yiialkalmi_redis_1

这是我的docker-compose.yml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
app:
image: ubuntu:16.04
volumes:
    - .:/var/www/html

nginx:
    build: ./docker/nginx/
    ports:
        - 80:80
    links:
        - php
    volumes_from:
        - app
    volumes:
        - ./docker/nginx/conf.d:/etc/nginx/conf.d

php:
    build: ./docker/php/
    expose:
        - 9000
    links:
        - postgres
        - redis
    volumes_from:
        - app

postgres:
    image: postgres:latest
    volumes:
        - /var/lib/postgres
    environment:
        POSTGRES_DB: project
        POSTGRES_USER: project
        POSTGRES_PASSWORD: project

redis:
    image: redis:latest
    expose:
        - 6379

1
docker EXEC -it yiialkalmi_postgres_1 psql -U project -W project project

一些解释

  • docker exec -it
    用于对正在运行的容器运行命令的命令。 it标志打开一个交互式tty。基本上它将导致连接到终端。如果您想打开bash终端,可以执行此操作

docker exec -it yiialkalmi_postgres_1 bash

  • yiialkalmi_postgres_1
    容器名称(您可以改用容器ID,在您的情况下为40e39bd0329a)
  • psql -U project -W project
    对正在运行的容器执行的命令

  • U用户

  • W密码
  • project您要连接的数据库。

这些是您在这里指定的

1
2
3
4
environment:
    POSTGRES_DB: project
    POSTGRES_USER: project
    POSTGRES_PASSWORD: project


如果要在容器中还原数据库,可以执行此操作

1
docker EXEC -i app_db_1 psql -U postgres < app_development.back

不要忘记添加-i

:)


如果您正在运行" postgres"容器:

1
docker run -it --rm --link postgres:postgres postgres:9.6 sh -c"exec psql -h \$POSTGRES_PORT_5432_TCP_ADDR -p \$POSTGRES_PORT_5432_TCP_PORT -U postgres"

1
2
3
RUN /etc/init.d/postgresql START &&\
    psql --command"CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\
    createdb -O docker docker &&\


您可以使用docker-compose在postgres容器中输入以下内容

docker-compose exec postgres bash

知道postgres是服务的名称。将其替换为docker-compose文件中的Postgresql服务的名称。

如果您有许多docker-compose文件,则必须添加要用于执行命令的特定docker-compose.yml文件。请使用以下命令。

docker-compose -f < specific docker-compose.yml> exec postgres bash

例如,如果您要使用名为local.yml的docker-compose文件运行命令,则该命令将为

docker-compose -f local.yml exec postgres bash

然后,使用psql命令并使用-d标志指定数据库名称,并使用-U标志指定用户名。

psql -U -d

Baammm !!!!!你在。