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
)。 然后容器可以连接到这个地址。