1. ホーム
  2. postgresql

[解決済み] Docker - postgresコンテナでpsqlコマンドを実行するには?

2022-10-31 10:45:53

質問

データベース上でいくつかのクエリを実行するために、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

いくつかの説明

  • 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 接続時にパスワードのプロンプトが必要であることを psql に伝えてください。 このパラメータはオプションです。 このパラメータがない場合、通常パスワードが必要であることを発見する余分な接続の試行が行われます。 PostgreSQLドキュメント .

  • project には、接続したいデータベースを指定します。は必要ありません。 -d パラメータがオプションでない最初の引数であるとき、それをdbnameとしてマークする必要はありません。 -d は、コマンドラインの非オプションの第1引数としてdbnameを指定するのと同じです。

これらは、ここであなたが指定する

environment:
    POSTGRES_DB: project
    POSTGRES_USER: project
    POSTGRES_PASSWORD: project