从Docker容器连接到主机服务的典型方法

在这个问题上,也有一些类似的问题,但据我所知,Docker生态系统自问世以来就发生了很大的变化,我仍然无法在任何地方find规范的答案。

所以,如果我的主机上有一个像Redis这样的数据库,并且我希望我的容器可以访问它,那么这样做的标准方法是什么?

除非你有像防火墙那样的东西阻塞它(就像你提到的那个问题那样),只要连接到它就好像你在另一台机器上一样。

你的容器将有自己的IP地址和虚拟以太网设备; Docker将通过Docker桥将该设备设置为主机; 它应该都工作正常。

我可以想出十几个其他的原因让你有麻烦,但是会让你提到你遇到的具体问题。

经过大量的研究,我发现了两种支持的方式:

  1. 在同一主机上的另一个容器中运行您的服务。 然后你可以连接两个使用 – --link 。 更多信息在这里 。
  2. 如果像在我的情况那样,你想效仿在Docker容器之外运行服务(因为这是你如何运行的东西,或者因为将服务移动到Docker容器中太麻烦或者其他任何原因),您可以通过将有关主机的信息传递给Docker来完成此任务,以便将其视为任何其他计算机。 如果你使用的是boot2docker,你的主机总是映射到192.168.59.3,所以我所做的就是创build一个别名,并在运行时通过--add-host标志告诉Docker。 例如: docker run --add-host=localbox:192.168.59.3 ... 这让我现在打到别名“localbox”来访问Docker中的本地主机上的任何东西。 例如,在Docker中连接到本地主机上的mysql,我只需要执行mysql -h localbox

最后,对于#2的一个警告:你的服务将把试图从Docker内部连接到你本地主机的服务作为一个外部进程,所以为了这个工作,你需要确保服务不仅仅是在127.0 .0.1,根据您添加的内容,您需要打开防火墙以允许根据您的需要进行连接。