允许Docker容器访问在本地主机上运行的Postgres

我有一个应该运行(HTTP)服务的docker集装箱。 这个容器应该能够连接到在主机上运行的PostgresSQL(所以它不是容器的一部分)。 容器使用主机的networking设置:

docker run -e "DBHOST=localhost:5432" -e "DB=somedb" -e "AUTH=user:pw" -i -t --net="host" myservice 

我使用的是MacOSX,所以Docker在Virtualbox虚拟机上运行。 我想我需要端口转发来完成这项工作。 我试过configuration:

 VBoxManage controlvm "default" natpf1 "rule1,tcp,,5432,,5432"; 

但是这不起作用。 如果我启动服务,我所得到的只是一个拒绝连接的消息,服务无法连接到Postgres。

Postgres在主机上的端口5432上运行。 “默认”是Docker安装程序创build的虚拟机的名称。

我究竟做错了什么? 请帮忙!

我已经使用--add-host标志取得了成功,该标志将一个条目添加到容器中的/ etc / hosts中。 Boot2docker和docker-machine都分配一个ip,你可以使用它来从一个容器中打你的localhost,所以你只需要添加一个指向这个的条目。

使用boot2docker,默认主机ip是192.168.59.3,你可以做docker run --add-host=my_localhost:192.168.59.3 ...

使用docker-machine,我想你需要在Virtualbox中查找你本地主机的映射IP,然后你可以这样做: docker run --add-host=my_localhost:[localhost_mapped_ip_from_docker] ...

尝试设置,然后尝试通过my_localhost连接到您的Postgres实例。 确保你在Postgres中正确设置了访问权限并接受了入站IP权限,就好像它没有监听容器的IP地址或者0.0.0.0一样,无论如何都不会工作。