如何在Docker Swarm集群中配置仅内部可访问的端口不对外暴露
Docker Swarm模式下集群内部端口配置方案
你当前使用的ports配置会将容器端口发布到Swarm的 ingress 网络,绑定到宿主机的端口上,因此会对外暴露。要实现仅集群内部可访问,按如下操作即可:
直接删除配置中的整个
ports代码块
只要你的服务都加入了同一个overlay网络(你配置中的my-network符合要求),同一网络下的所有服务默认可以直接通过服务名+容器内部监听端口互相访问,无需做任何端口映射配置。其他服务访问你这个management服务时,直接使用management:80即可连通。可选:显式声明内部使用的端口
如果需要明确标注服务开放的内部端口,可以添加expose字段,该字段仅作为配置说明,不会额外对外暴露端口:
version: "3.8" services: management: image: ${IMAGE} env_file: - vars.env networks: - my-network # 新增expose字段仅做标注用,可省略 expose: - "80" deploy: placement: constraints: [node.role == manager] replicas: 1 update_config: parallelism: 2 restart_policy: condition: on-failure networks: my-network: external: true
补充说明
- 只有需要对外提供访问的服务,才需要配置
ports字段做端口映射。 - 跨节点的Swarm集群中,只要服务接入同一个overlay网络,就可以直接通过服务名互访,不需要额外配置网络规则。
内容的提问来源于stack exchange,提问作者KIRY4
相关产品推荐
相关产品推荐

