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
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 fairedocker 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 passeproject
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
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
:)
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"
RUN /etc/init.d/postgresql start &&\
psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\
createdb -O docker docker &&\