使用Python Web App的Docker容器 - 连接到主机上的Postgres(OSX)

时间:2017-03-03 04:34:55

标签: python postgresql docker

我可以在我的网络应用中连接到我的本地Postgres数据库,但如果我在Docker容器内运行网络应用程序,则

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

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

按照我的设置和命令:

主机

  • 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

Docker网络处于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连接?

Docker网络处于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

错误:

  

服务器意外关闭连接
  这可能意味着   服务器在处理请求之前或处理时异常终止。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

有一条关于在docs

中执行此操作的说明
  

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

     

Mac有不断变化的IP地址(如果没有网络访问权限,则为无)。我们目前的建议是将未使用的IP附加到Mac上的lo0界面;例如:sudo ifconfig lo0 alias 10.200.10.1/24,并确保您的服务正在侦听此地址或0.0.0.0(即不是127.0.0.1)。然后容器可以连接到这个地址。