因此,我正在做一个项目,其中有两个Docker容器,一个用于主应用程序,一个用于redis(使用docker compose btw)。自然,我想同时连接两者并尝试使用默认的绑定设置,但是由于它们位于两个不同的容器中,因此应用程序当然无法连接到数据库。然后我在读完this之后才使用0.0.0.0。但是,我仍然想问是否有一种方法可以将redis绑定到我的本地网络,以便只有在它内部运行的计算机才能连接。但是,我仍然想问是否有一种方法可以将Redis绑定到我的本地网络,以便只有在其中运行的计算机才能连接。
This并不是我真正想要的。也许会加入类似this之类的东西?
有人对我如何使Redis仅接受来自其他容器的连接(通过docker compose链接)或将Redis绑定到0.0.0.0并采用强大的安全措施是唯一好的方法吗?
谢谢!
答案 0 :(得分:1)
使Docker托管的服务仅可由同一主机上的其他容器访问很容易。如果您:
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固有的魔术。