Docker访问主机服务的最佳实践

时间:2018-01-31 09:47:19

标签: postgresql docker

在docker容器中访问主机服务的最佳做法是什么?

我想访问在我的应用程序中运行在Docker容器中的主机上运行的PostgreSQL

我发现最简单的方法是使用基于this答案的docker container run --net="host",其行为如下:

  

这样的容器将与docker主机共享网络堆栈,从容器的角度来看,localhost(或127.0.0.1)将引用docker主机。

     

请注意,Docker容器中打开的任何端口都将在docker主机上打开。这不需要-p或-P docker run选项。

这似乎不是最佳做法,因为容器应与主机隔离。

我发现的其他方法是awk主机IP。这可能是要走的路吗?

1 个答案:

答案 0 :(得分:4)

在这种情况下,将主机视为远程计算机的最佳选择。这样,容器将是可移植的,并且在连接到数据库时不会严格依赖网络位置。

除了使用--network=host的缺点所提到的内容之外,此选项还会通过假设在localhost上找到数据库来将容器与主机紧密耦合。

将计算机视为远程计算机的方法是使用标准网络结构,如IP和DNS。为容器定义一个新的DNS条目,该条目将指向使用该查找数据库的主机 停靠者运行的--add-host选项。

docker run --add-host db-static:<ip-address-of-host> ...

然后在容器内通过db-static

连接到数据库