You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Swarm中是否支持类似docker-compose的expose指令不对外暴露端口?

Docker Swarm 中类docker-compose expose功能的实现说明

首先给出明确结论:Docker Swarm原生支持和docker-compose完全一致的expose指令功能,核心特性与ports完全区分,不会将端口暴露给外部网络。

具体使用方式

Swarm模式下通过docker stack deploy加载compose文件部署服务时,直接在服务配置中声明expose字段即可,用法和单机docker-compose没有区别,示例配置如下:

version: "3.8"
services:
  backend:
    image: your-backend-image
    # 仅将8080端口开放给同网络下的其他服务
    expose:
      - "8080"
    # 接入内部专属overlay网络,默认仅集群内服务可互访
    networks:
      - internal-only
networks:
  internal-only:
    driver: overlay
    # 配置internal为true后,该网络完全无法和集群外部通信
    internal: true

配置效果说明

  • expose声明的端口不会在宿主机上启动监听,不会对外暴露,仅允许同一个overlay网络下的其他Swarm服务访问
  • 如果需要对外提供访问,才需要配置ports字段,该配置会将端口映射到Swarm节点的宿主机端口,默认对集群外部网络开放

为什么有人认为Swarm不支持expose?

大部分无法生效的场景都是以下两类原因导致的:

  • 版本兼容性问题:17.06之前的旧版Docker,stack部署对compose v3格式的字段支持不完善,部分版本会忽略expose配置,升级到Docker稳定版即可解决
  • 网络配置错误:如果服务接入的是没有设置internal: true的overlay网络,且你的集群节点路由对外可达,确实可能从外部访问到expose的端口,这种情况只需给内部服务单独配置internal类型的overlay网络即可隔离外部访问。

内容的提问来源于stack exchange,提问作者Federico Bellini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:12:02