it-roy-ru.com

Docker - Как выполнить команду psql в контейнере postgres?

Я хотел бы использовать psql в образе postgres для выполнения некоторых запросов к базе данных . Но, к сожалению, когда я присоединяюсь к контейнеру postgres, я получаю эту ошибку, команда psql не найдена ...

Для меня немного загадка, как я могу выполнять SQL-запросы или команды Postgre в контейнере.

Как запустить команду psql в контейнере postgres? (Я новый парень в мире Docker)

Я использую Ubuntu в качестве хост-машины, и я не установил postgres на хост-машине, вместо этого я использую контейнер postgres.

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     

Здесь контейнеры:

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:

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
32
Dabagab
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 Имя контейнера (вместо этого вы можете использовать идентификатор контейнера, который в вашем случае будет 40e39bd0329a)
  • psql -U project -W project Команда для выполнения в работающем контейнере

  • U пользователь

  • W пароль
  • project база данных, к которой вы хотите подключиться.

Это указано вами здесь

environment:
    POSTGRES_DB: project
    POSTGRES_USER: project
    POSTGRES_PASSWORD: project
52
alkis

Если вы хотите восстановить базу данных в контейнере, вы можете сделать это

docker exec -i app_db_1 psql -U postgres < app_development.back

Не забудьте добавить -i

:)

5
joselo

Если у вас запущен контейнер "postgres":

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"
2
Vojtech Vitek
RUN /etc/init.d/postgresql start &&\
    psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\
    createdb -O docker docker &&\
0
vijay