将Redis容器与另一个容器连接(Docker)

时间:2018-10-12 14:33:28

标签: docker redis

因此,我正在做一个项目,其中有两个Docker容器,一个用于主应用程序,一个用于redis(使用docker compose btw)。自然,我想同时连接两者并尝试使用默认的绑定设置,但是由于它们位于两个不同的容器中,因此应用程序当然无法连接到数据库。然后我在读完this之后才使用0.0.0.0。但是,我仍然想问是否有一种方法可以将redis绑定到我的本地网络,以便只有在它内部运行的计算机才能连接。但是,我仍然想问是否有一种方法可以将Redis绑定到我的本地网络,以便只有在其中运行的计算机才能连接。

This并不是我真正想要的。也许会加入类似this之类的东西?

有人对我如何使Redis仅接受来自其他容器的连接(通过docker compose链接)或将Redis绑定到0.0.0.0并采用强大的安全措施是唯一好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

使Docker托管的服务仅可由同一主机上的其他容器访问很容易。如果您:

  1. 将服务器设置为绑定或侦听0.0.0.0或:: 0(所有地址);
  2. 创建一个非默认的Docker网络(Docker Compose将自动执行此操作);
  3. 在该Docker网络上启动服务器容器和任何关联的客户端容器(默认情况下,Docker Compose会执行此操作);和
  4. 不要设置docker run -p或Docker Compose ports:选项

然后,客户端容器可以使用其容器名称作为主机名来访问服务器容器,但是主机上的非Docker进程以及其他主机无法访问服务器。

如果主机具有多个网络接口,并且绑定到其中一个网络接口会使服务“私有”,那么您可以使用docker run -p执行相同的操作。如果您的主机具有公共IP地址10.20.30.40/16和私有IP地址192.168.144.128/24,那么docker run -p 192.168.144.128:6379:6379将使其对私有网络(和上述其他Docker容器)可用,但对公共网络不可用。 (容器内部的服务器本身仍需要绑定到0.0.0.0。)

如果您另外需要使服务器在主机外可见,但仅在某些IP地址上可见,我认为您可以使用iptables并非Docker固有的魔术。