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)
答案 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规则并不十分稳定。