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

3
所以,我正在做一个项目,其中有两个Docker容器,一个是主应用程序,另一个是Redis(使用docker compose)。自然地,我想连接两个容器,并尝试了默认的绑定设置,但由于它们位于两个不同的容器中,当然应用程序无法连接到数据库。然后我只是按照this上的内容使用了0.0.0.0。然而,我仍然想问是否有一种方法可以将Redis绑定到我的本地网络,这样只有在其中运行的机器才能连接。

并不是我想要的。也许可以加入类似于this的东西吗?

是否有人有一个好的解决方案,让我如何使Redis仅接受来自连接的另一个容器的连接(由Docker Compose链接)或者绑定Redis到0.0.0.0并使用强大的安全措施是唯一的方法?

提前感谢!

1个回答

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地址可见,则我认为您只能使用不属于Docker本身的iptables技巧。

那么,使用docker-compose启动服务将使服务器容器仅从yml文件中指定的其他服务访问,对吗? - Tmpod
除非您明确使用 ports: 设置发布它,否则是的。 - David Maze
@DavidMaze 你能分享一些docker-compose的例子吗? - Saqib Shehzad
任何Compose示例都可以使用;删除ports:,这将使服务在Docker空间之外发布。 - David Maze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接