将多个Docker容器连接到主机

时间:2019-04-19 18:36:15

标签: docker networking

TL; DR:我只想一种无需使用localhost即可将流量转发到--net=host到主机的方法

我在同一主机上运行多个容器,需要它们访问Redis实例,该实例可在localhost:6379上使用。另外,我需要使用端口转发,因此不能选择使用--net=host

如何启动多个容器,并允许所有容器将流量向localhost转发到主机?

我也尝试了docker run --add-host localhost:<private ip address> -p <somehostport>:<somecontainerport> my_image,但没有成功(我仍然得到与127.0.0.1:6379的连接被拒绝,好像localhost尚未解析到主机的私有IP)

2 个答案:

答案 0 :(得分:0)

  

我在同一主机上运行多个容器,需要它们访问Redis实例,该实例可在localhost:6379上获得。

你不能。

如果某些内容仅在localhost上监听,则您无法从另一台计算机,虚拟机或容器连接到该内容。但是,如果您的服务正在监听主机上的任何其他地址,那么您只需将容器指向该地址即可。

一种解决方案是将Redis服务配置为侦听docker0网桥的地址,然后将容器指向该地址。

答案 1 :(得分:0)

这可以通过较小的重新设计更好地解决。将redis移入容器。通过容器网络连接容器,然后将redis端口发布到localhost中,以获取仍然不在容器中的任何内容。例如

docker network create redis
docker run -d --net redis -p 127.0.0.1:6379:6379 --name redis redis
docker run -d --net redis -e REDIS_URL=redis:6379 your_app

容器需要通过用户创建的网络通过容器名称进行通信,因此您的应用将需要配置新的redis URL(将localhost更改为redis)。

为此,我看到的唯一其他解决方案涉及黑客入侵iptables规则,当重新部署容器时,iptables规则并不十分稳定。