我们在 Digital Ocean 上运行堆栈。为了提高安全性,docker swarm 所有都在 Droplets 上的专用网络 (eth1) 上运行。我们有一些管理服务,我们不想在公共 IP 上公开,而是在私有 IP 上公开。
是否可以在特定接口上公开端口?或者可以创建另一个仅在私有 IP 上公开端口的入口网络?
我们现在的解决方法是,我们只是将这些服务作为普通容器运行,并在私有 IP 地址上公开端口。
我们在 Digital Ocean 上运行堆栈。为了提高安全性,docker swarm 所有都在 Droplets 上的专用网络 (eth1) 上运行。我们有一些管理服务,我们不想在公共 IP 上公开,而是在私有 IP 上公开。
是否可以在特定接口上公开端口?或者可以创建另一个仅在私有 IP 上公开端口的入口网络?
我们现在的解决方法是,我们只是将这些服务作为普通容器运行,并在私有 IP 地址上公开端口。
使用覆盖网络驱动程序(使用入口网络)时,只有一个入口,用--data-path-addr
during定义docker swarm init/join
。您可以将专用网络用于 Swarm“控制平面” --advertise-addr
,但这是您唯一拥有的控制权。
如果您需要控制对特定登录名/IP 组的访问,那么我建议您在它们前面放置一个代理并以这种方式进行控制。这是一些关于它的 nginx 信息。您也许可以在 Docker Flow Proxy 或 Traefik 中进行设置。
您可以做的另一件事是设置服务约束,其中一组服务器用于公共访问,另一组正在侦听私有 IP 并具有特定的节点标签,因此您可以部署具有仅部署到私有/公共服务器的约束的服务。
答案是否定的,你不能从 docker v20 开始:
--advertise-addr
,--listen-addr
都--data-path-addr
与服务容器暴露端口将绑定到哪些接口无关。--ip
启动的独立容器实现了所需的结果,而不是docker swarm。run
docker-compose
Github 上有一个开放的功能请求问题。它自 2016 年以来一直开放,没有任何进展,但似乎受到了核心开发人员的大量反对。在该问题中讨论了一些骇人听闻的变通方法。也看到这个问题。