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

时间:2014-11-20 11:21:37

标签: docker

有一些类似的问题,如this one,但据我所知,Docker生态系统自被问及以来已经发生了很大变化,我仍然无法在任何地方找到规范的答案。

所以,如果我在我的主机上运行像Redis这样的数据库,并且我希望我的容器可以访问它,那么这样做的规范方法是什么?

2 个答案:

答案 0 :(得分:1)

除非你有阻止它的防火墙(就像你提到的那样),你只需连接到它就像在另一台机器上一样。

您的容器将拥有自己的IP地址和虚拟以太网设备; Docker将设置从该设备通过Docker桥到主机的路由;它应该都可以正常工作。

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

答案 1 :(得分:0)

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

  1. 在同一主机上的另一个容器中运行您的服务。然后,您可以使用--link连接两者。更多信息here
  2. 如果在我的情况下,你想要模拟让服务在Docker容器之外运行(因为这是你在prod中运行的东西,或者因为将服务移动到docker容器中太麻烦了,或者您可以通过将有关主机的信息传递给Docker来实现此目的,以便将其视为任何其他计算机。如果您正在使用boot2docker,那么您的主机始终映射到192.168.59.3,因此我所做的就是创建一个别名,并在运行时使用--add-host标志告诉Docker。示例:docker run --add-host=localbox:192.168.59.3 ...。这让我现在点击别名“localbox”来从Docker中访问我的localhost上的任何内容。例如,要从Docker中连接到localhost上的mysql,我只需mysql -h localbox
  3. 最后,对于#2的警告:您的服务会将尝试从Docker内部连接到localhost上的服务作为外部进程处理,因此为了使其正常工作,您需要确保服务正在侦听仅在127.0.0.1上,根据您添加的内容,您需要打开防火墙以允许连接符合您的需求。