

Dockerのコンテナでpostgresのサーバーを立ち上げています。

[code]

    CONTAINER ID        NAMES        　　　　　　　IMAGE             COMMAND                  CREATED             STATUS              PORTS
    b292a7d3de2d        backend_container        rails             "rails c"                About an hour ago   Up About an hour
    b1e3345f625d        postgres_container       postgres          "/docker-entrypoint.s"   2 days ago          Up 3 hours          5432/tcp
    
[/code]

docker-composeでbackend_containerからpostgres_containerへリンクしており、リンクしたコンテナからは  
`psql -U postgres -h db -d postgres`  
でアクセスできます。

しかし、ローカル環境（Dockerコンテナをホストしている環境）からはpsqlでアクセスができません。  
たとえば、こんなコマンドでトライしています。`psql -h $(docker inspect --format "{{
.NetworkSettings.IPAddress }}" postgres_container) -U postgres -d postgres`

`docker exec`を使えばログインすることはできるのですが、、、`docker exec -it postgres_container psql
-U postgres`

ローカル環境から直接、psqlで接続するにはどうしたら良いでしょうか？  
アクセスコントロールの問題かと思い、いろいろ試してみましたがどうにもうまくいきません。

環境は以下のとおりです。

> ホスト: MacBook Pro (OS X El Capitan Version 10.11.6)  
>  Docker version 1.12.3, build 6b644ec  
>  docker-compose version 1.8.1, build 878cff1

皆様のお知恵をお貸しいただければ幸いです。どうぞよろしくお願いいたします。


CC BY-SA 3.0
2016-12-28T08:22:59.897
31491
2017-11-06T12:16:02.103
19822
question
docker docker-compose
postgresのDockerコンテナにpsqlで接続したい


portを指定しても接続できないでしょうか？

[code]

    psql -h $(docker inspect --format "{{ .NetworkSettings.IPAddress }}" postgres_container) -U postgres -d postgres -p 5432
    
[/code]


CC BY-SA 3.0
2016-12-28T08:51:12.920
31493
2016-12-28T08:51:12.920
186
31491
answer


docker実行時にポートを指定していないようです．  
docker-compose.ymlにて

[code]

    ports:
      - "5432:5432"
    
[/code]

のように指定する必要があります．


CC BY-SA 3.0
2017-01-02T03:32:17.463
31566
2017-01-02T07:38:20.870
2017-01-02T07:38:20.870
3054
7770
31491
answer


私も同じような事象に出会ったので、その対策を共有します。  
（これで解決するかわかりませんが）

■原因  
宛先ホストが間違っている。

docker-composeすると、閉じたNWになるっぽいので、  
ホストから見えるpostgresqlコンテナのIP （例： localhost:5432)と、  
上記NW内から見えるpostgresqlコンテナのIPは異なっています。  
  
■対策  
１．以下を実行して、postgresqlコンテナのIPを見つけてください。（「IPAddress」みたいな項目）  
$docker inspect

２．postgresqlクライアントにて、上記IPを指定して接続してください。

以上です。


CC BY-SA 3.0
2017-11-06T12:16:02.103
39339
2017-11-06T12:16:02.103
26069
31491
answer