我有一个应该运行(HTTP)服务的docker容器。 此容器应该能够连接到在主机上运行的PostgresSQL(因此它不是容器的一部分)。容器使用主机的网络设置:
docker run -e "DBHOST=localhost:5432" -e "DB=somedb" -e "AUTH=user:pw" -i -t --net="host" myservice
我使用MacOSX,因此Docker在Virtualbox VM上运行。我想我需要端口转发来完成这项工作。我试图配置:
VBoxManage controlvm "default" natpf1 "rule1,tcp,,5432,,5432";
但这不起作用。如果我启动该服务,我得到的只是连接被拒绝的消息,该服务无法连接到Postgres。
Postgres正在主机上的端口5432上运行。 "默认"是Docker安装程序创建的VM的名称。
我做错了什么?请帮忙!
答案 0 :(得分:1)
我使用--add-host
标志取得了成功,该标志在容器中的/ etc / hosts中添加了一个条目。 Boot2docker和docker-machine都指定了一个可以用来从容器内部命中localhost的ip,所以你只想添加一个指向这个的条目。
使用boot2docker,默认主机ip为192.168.59.3,你可以docker run --add-host=my_localhost:192.168.59.3 ...
使用docker-machine,我认为你需要在Virtualbox中查找localhost的映射ip,然后你也可以这样做:docker run --add-host=my_localhost:[localhost_mapped_ip_from_docker] ...
尝试进行设置,然后尝试通过my_localhost
连接到Postgres实例。确保你在Postgres中正确设置了访问和接受的入站ip权限,就好像它没有在容器的ip或0.0.0.0上监听一样,无论如何它都无法工作。