在docker容器中访问主机服务的最佳做法是什么?
我想访问在我的应用程序中运行在Docker容器中的主机上运行的PostgreSQL
。
我发现最简单的方法是使用基于this答案的docker container run --net="host"
,其行为如下:
这样的容器将与docker主机共享网络堆栈,从容器的角度来看,localhost(或127.0.0.1)将引用docker主机。
请注意,Docker容器中打开的任何端口都将在docker主机上打开。这不需要-p或-P docker run选项。
这似乎不是最佳做法,因为容器应与主机隔离。
我发现的其他方法是awk
主机IP。这可能是要走的路吗?
答案 0 :(得分:4)
在这种情况下,将主机视为远程计算机的最佳选择。这样,容器将是可移植的,并且在连接到数据库时不会严格依赖网络位置。
除了使用--network=host
的缺点所提到的内容之外,此选项还会通过假设在localhost
上找到数据库来将容器与主机紧密耦合。
将计算机视为远程计算机的方法是使用标准网络结构,如IP和DNS。为容器定义一个新的DNS条目,该条目将指向使用该查找数据库的主机
停靠者运行的--add-host
选项。
docker run --add-host db-static:<ip-address-of-host> ...
然后在容器内通过db-static