Docker Compose扩容容器时桥接网络内能否用expose做范围端口映射
问题解答
首先可以明确,expose 字段不支持你给出的 端口范围:容器端口 这种映射写法,它本身也没有端口映射的能力,仅用于声明容器需要监听的端口,属于标注性质的配置,不会将端口绑定到宿主机网络。
你的需求不需要额外配置端口映射,完全可以直接实现:
- 所有从容器的配置里直接删除
ports字段,仅保留容器内服务监听8085端口即可,同桥接网络下的容器默认可以互相访问任意监听的端口,expose字段甚至可以省略,写了也只是起到标注作用,不会限制访问也不会额外暴露端口。 - 你完全不需要为从容器分配不同的内部端口:Docker 中每个容器有独立的网络栈,多个从容器同时监听8085端口不会产生冲突,主负载均衡容器直接通过从容器的服务名访问8085端口即可,Docker 内置的DNS和服务发现会自动将请求负载到不同的从容器实例上。
- 如果你确实需要显式声明端口,只需要按如下写法配置即可:
expose: - "8085"
如果你有特殊场景一定要为每个从容器分配不同的内部端口,也可以通过启动命令动态传递端口参数给容器内的服务,再配合expose的范围写法(仅声明容器侧的端口范围,没有映射逻辑):
expose: - "8086-8090"
这种写法只会声明容器开放了8086到8090这段端口,不会和宿主机产生绑定,也不会自动做端口映射,需要你自己保证容器内的服务监听对应端口。
内容的提问来源于stack exchange,提问作者user715022
相关产品推荐
相关产品推荐

