web-dev-qa-db-fra.com

Docker - Comment exécuter la commande psql dans le conteneur postgres?

Je voudrais utiliser le psql dans l'image postgres afin d'exécuter des requêtes sur la base de données . Malheureusement, lorsque j'ai attaché au conteneur postgres, j'ai eu cette erreur, la commande psql n'est pas trouvée ...

Pour moi, il est un peu mystérieux de savoir comment exécuter des requêtes ou des commandes postgre sql dans le conteneur.

Comment exécuter la commande psql dans le conteneur postgres? (Je suis un nouveau gars dans le monde Docker)

J'utilise Ubuntu en tant qu'ordinateur hôte et je n'ai pas installé Postgres sur l'ordinateur hôte. J'utilise plutôt le conteneur 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     

Voici les conteneurs:

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

Et voici mon 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

Quelques explications

  • docker exec -it Commande permettant d'exécuter une commande sur un conteneur en cours d'exécution. Les indicateurs it ouvrent un terminal interactif. Fondamentalement, il faudra s'attacher au terminal. Si vous voulez ouvrir le terminal bash, vous pouvez le faire

docker exec -it yiialkalmi_postgres_1 bash

  • yiialkalmi_postgres_1 Le nom du conteneur (vous pouvez utiliser l'identifiant du conteneur, qui dans votre cas serait 40e39bd0329a)
  • psql -U project -W project La commande à exécuter dans le conteneur en cours d'exécution

  • U utilisateur

  • W mot de passe
  • project la base de données à laquelle vous souhaitez vous connecter.

Ceux-ci sont spécifiés par vous ici

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

Si vous souhaitez restaurer la base de données dans un conteneur, vous pouvez le faire.

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

N'oubliez pas d'ajouter -i

:)

5
joselo

Si vous utilisez un conteneur "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