Docker - postgres コンテナで psql コマンドを実行するにはどうすればいいですか? 質問する

Docker - postgres コンテナで psql コマンドを実行するにはどうすればいいですか? 質問する

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

ベストアンサー1

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「コマンドラインで最初の非オプション引数として dbname を指定するのと同じです。」

これらはここで指定されます

environment:
    POSTGRES_DB: project
    POSTGRES_USER: project
    POSTGRES_PASSWORD: project

おすすめ記事