Docker容器与Python Web应用程序 – 连接到主机上的Postgres(OSX)

我可以连接到我的本地Postgres数据库在我的Web应用程序,但不是如果我运行Docker容器内的Web应用程序。

  • Web应用程序在Docker容器中运行
  • Postgres在主机上运行

我不确定它是否与Postgres连接设置或Dockernetworking设置有关。

按照我的设置和命令:

主持人

  • OSX 10.11.6
  • PostgreSQL 9.6

docker集装箱

  • Docker 1.13.1
  • Docker-machine 0.9.0
  • Docker容器操作系统:python:3.6.0-alpine
  • Python 3.6 + psycopg2 == 2.7

postgresql.conf

listen_addresses = '*' 

的pg_hba.conf

 host all all 127.0.0.1/32 trust host all all 0.0.0.0/0 trust host all all 172.17.0.0/24 trust host all all 192.168.99.0/24 trust 

Dockernetworking处于HOST模式

 docker run -i --net=host -h 127.0.0.1 -e POSTGRES_URI=postgresql://127.0.0.1:5432/db my/image 

错误:

无法连接到服务器:连接被拒绝
服务器是否在主机“127.0.0.1”上运行,并在端口5432上接受TCP / IP连接?

Dockernetworking处于BRIDGE模式

 docker run -i --add-host=dockerhost:`docker-machine ip ${DOCKER_MACHINE}` -e POSTGRES_URI=postgresql://dockerhost:5432/db -p 8000:8000 -p 5432:5432 my/image 

错误:

服务器意外closures了连接
这可能意味着服务器在处理请求之前或之中exception终止。

有任何想法吗?

有关于在文档中这样做的说明

我想从容器连接到主机上的服务

Mac有一个不断变化的IP地址(如果你没有networking访问权限,则没有)。 我们目前的build议是将一个未使用的IP连接到Mac上的lo0接口; 例如: sudo ifconfig lo0 alias 10.200.10.1/24 ,并确保您的服务正在监听这个地址或0.0.0.0 (即不是127.0.0.1 )。 然后容器可以连接到这个地址。