質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.55%

local環境のdockerのコンテナ内のdbをposticoでみたい

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 222

you88

score 118

dockerを使ってlocal環境で開発しており、postgresqlを使っています。local開発環境のdbの値をpostico経由で見たいのですが

could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5433?
could not connect to server: Connection refused
    Is the server running on host "localhost" (fe80::1) and accepting
    TCP/IP connections on port 5433?
could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5433?

と出てしまいます。dockerfileなどは下記設定です。railsで開発しています。

version: '3'
services:
  db:
    image: postgres:9.5.18
    volumes:
      - ./docker/pg:/var/lib/postgresql
    environment:
      POSTGRES_PASSWORD: password
      POSTGRES_USER: localhost
      POSTGRES_DB: test_db
    ports:
      - '5433:5432'
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: password
  pool: 5

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

posticoの設定は下記

イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • bsdfan

    2020/03/15 20:42

    dockerの環境はなんでしょうか?

    キャンセル

  • you88

    2020/03/15 21:21

    for macです!

    dockercomposeでdbとwebを立ち上げています。

    キャンセル

  • bsdfan

    2020/03/16 15:20

    Docker Toolboxでlocalhostにつながらないという、よくあるパターンではなさそうですね。
    postico以外のツール(psqlとか)で試してみて、問題を切り分けてみてはどうでしょう。

    キャンセル

回答 3

check解決した方法

+1

databse.ymlのusernameとdocker-compose.ymlのPOSTGRES_USERが一致していないという初歩的ミスでした。協力いただいた方々ありがとうございました!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/28 10:39

    database.ymlはposticoに関係ないような気がするのですが、解決したのならまあいいか。

    localhostは普通マシン名(自分のIPアドレスを示す)につかう名前で、ユーザー名にはあまり使わないのですよね。問題と関係なさそうなので、混乱させちゃいけないと思って言わずにおいたのですが、これが答えなら、言っておけばもっと早く解決したかもしれないですね。世の中難しいもんです😐

    キャンセル

  • 2020/03/28 10:46

    いやはやすみません。そうすねposticoってかそもそもの設定部分の間違えでした。。。

    でも丁寧に教えてもらったおかげで理解深まりました!ありがとうございました!

    キャンセル

+1

コピペしたものをdocker-compose.ymlに貼り付けて試してみたけど、普通に繋がりますねえ。

イメージ説明
イメージ説明

切り分けの手順としては、

  1. アプリじゃなくてpsqlで試してみる
$ psql -U localhost -d test_db -h localhost -p 5433
Password for user localhost:
psql (12.2, server 9.5.18)
Type "help" for help.

test_db=# \q

これでつながるようなら、postico自体やその設定が怪しい。
つながらないようなら別の問題なので2.へ

2.コンテナ内からつないで見る

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
f0b3ad031173        postgres:9.5.18     "docker-entrypoint.s…"   9 hours ago         Up 12 minutes       0.0.0.0:5433->5432/tcp   teratail_247008_db_1
$ docker exec -it teratail_247008_db_1 bash
root@f0b3ad031173:/# psql -U localhost -d test_db -h localhost -p 5432
psql (9.5.18)
Type "help" for help.

test_db=# \q

docker exec -it の後ろにつける"teratail_247008_db_1" 部分は環境によって名前が変わるので、docker psで出てきたNAMES部分(一番右端)の名前を使ってください

これでつながるのであれば、dockerのネットワークあたりの設定が怪しいです。

    ports:
      - '5433:5432'

とわざわざポート番号を変更していると、ポート指定間違いとかが起きやすいので、5432:5432にして試すのがいいんじゃないかと。

一方コンテナ内のpsqlすらつながらない場合、postgresの起動自体が怪しくなってきます。

root@f0b3ad031173:/# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postgres     1  0.0  1.1 274544 23084 ?        Ss   20:56   0:00 postgres
postgres    23  0.0  0.1 274544  3696 ?        Ss   20:56   0:00 postgres: checkpointer process
:

という具合にしてpostgresのプロセスがいるかどうかを確認します

bashとps auxしかいないようであれば、起動に失敗している可能性が高いので、コンテナから抜けて外から

$ docker-compose logs db

で起動時のログを見てみましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/22 10:59

    回答ありがとうございます!しかもめちゃくちゃ分かりやすい!

    1のpsqlを試すだと

    ```
    muraokayouhei@muraokaheinoMBP kaomojimaker % docker-compose run db psql -U localhost -d test_db -h localhost -p 5433
    psql: could not connect to server: Connection refused
    ```
    でつながらず。多分posticoじゃなくてpostgres自体なんだろうなと

    2のdocker execでの確認でも下記が出たので

    ```
    muraokayouhei@muraokaheinoMBP kaomojimaker % docker exec -it kaomojimaker_db_1 bash
    root@c22ae0834647:/# psql -U localhost -d test_db -h localhost -p 5432
    psql: FATAL: role "localhost" does not exist
    ```

    つながらずps auxでpostgresの起動を確認したんですが下記でbash、aux以外も出ていたので起動自体はしているのかな?という状態です

    ```
    root@c22ae0834647:/# ps aux
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    postgres 1 0.0 1.1 274528 23056 ? Ss 01:24 0:00 postgres
    postgres 25 0.0 0.1 274528 3704 ? Ss 01:24 0:00 postgres: checkpointer process
    postgres 26 0.0 0.2 274528 5368 ? Ss 01:24 0:00 postgres: writer process
    postgres 27 0.0 0.1 274528 3704 ? Ss 01:24 0:00 postgres: wal writer process
    postgres 28 0.0 0.3 274956 6336 ? Ss 01:24 0:00 postgres: autovacuum launcher process
    postgres 29 0.0 0.1 129644 2752 ? Ss 01:24 0:00 postgres: stats collector process
    root 38 0.0 0.1 19868 3676 pts/0 Ss 01:25 0:00 bash
    root 84 0.0 0.1 38308 3152 pts/0 R+ 01:32 0:00 ps aux
    ```

    postgresの起動はできているのかなということでdockercomposeのport番号などを変更して試してみます!

    キャンセル

  • 2020/03/26 06:43

    netstat -antp などできちんとListenしているかを確認されると良いかと思います。

    キャンセル

  • 2020/03/26 22:15

    % sudo lsof -i -P | grep "LISTEN"で確認してみました!下記が出てきたのでポートはちゃんと設定できているとみて良さそうでしょうか?

    ```
    com.docke 19611 muraokayouhei 43u IPv6 0xb9a7b833b3b1d59b 0t0 TCP *:5432 (LISTEN)
    com.docke 19611 muraokayouhei 45u IPv6 0xb9a7b833b3b1f43b 0t0 TCP *:3000 (LISTEN)
    ```

    キャンセル

+1

最初のdocker-compose runで接続する場合は以下のようにすればいけると思います。

docker-compose run db psql -U localhost -d test_db -h db -p 5432

二番目のdocker-compose execでログインしてから接続できないのは謎ですね。。。
lirliaさんがおっしゃっているように正常にListenしているか確認したほうが良いですね。
dockerのposgresはdebianで動いているようなので、以下のパッケージをインストールすれば確認できます。

apt-get update
apt-get install net-tools
netstat -antl

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/03/26 21:56

    これでpasswordの入力が出たんですがPOSTGRES_PASSWORD: passwordのpasswordと打ってもダメでした泣

    passってどこで設定したのを使えばいいんでしょうか?(初歩的な質問すみません)

    キャンセル

  • 2020/03/26 23:15

    パスワードはPOSTGRES_PASSWORDのpasswordで合ってます。
    パスワードのプロンプトが返ってきたってことは、dockerのpostgresは正常に5432ポートでリッスンできているようですね。
    こういう時は、大概しょうもないミス(typoとか)だったりするので、落ち着いてもう一度最初から作り直すと解決することがよくあります。

    キャンセル

  • 2020/03/26 23:43

    database.ymlだとユーザー名がlocalhostではなくpostgresになってます。
    railsが動いているなら、ユーザー名が違っていそうです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.55%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る