问题:连接一个Redis容器和另一个容器(Docker)

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

这个并不是我真正想要的。也许合并像这个这样的东西?

有没有人有一个很好的解决方案来让 Redis 只接受来自其他容器的连接(由 Docker Compose 链接)或将 Redis 绑定到 0.0.0.0 并使用强大的安全措施是唯一的方法?

提前致谢!

解答

很容易让 Docker 托管的服务只能被同一主机上的其他容器访问。如果你:

1.设置服务器绑定或监听0.0.0.0或::0(所有地址);

  1. 创建一个非默认 Docker 网络(Docker Compose 会自动执行此操作);

  2. 在该 Docker 网络上启动服务器容器和任何关联的客户端容器(Docker Compose 默认会执行此操作);和

  3. 不要设置docker run -p或 Docker Composeports:选项

然后客户端容器可以使用其容器名称作为主机名访问服务器容器,但主机和其他主机上的非 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魔法。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐