データベースでいくつかのクエリを実行するために、postgresイメージでpsqlを使用したいと思います。しかし、残念ながら、postgresコンテナにアタッチすると、psqlコマンドが見つからないというエラーが表示されました...
私にとっては、コンテナ内でpostgre sqlクエリまたはコマンドを実行する方法は少し謎です。
Postgresコンテナでpsqlコマンドを実行する方法は? (私は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
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
接続先のデータベース。これらはここで指定されます
environment:
POSTGRES_DB: project
POSTGRES_USER: project
POSTGRES_PASSWORD: project
コンテナ内のデータベースを復元する場合は、これを行うことができます
docker exec -i app_db_1 psql -U postgres < app_development.back
-iを追加することを忘れないでください
:)
「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 &&\