docker-compose使用scale参数扩容时所有端口被单个容器占用问题
问题原因
你当前的端口配置写法会让Docker为单个服务实例绑定宿主机25565~25570的全段端口到容器的25565端口,因此第一个启动的容器就占用了所有预留端口,第二个扩容实例没有可用端口,触发端口占用报错。
解决方案
根据你的需求选择对应配置即可:
方案1:从指定端口段为每个扩容实例分配单个固定范围端口
需使用3.2及以上版本的Compose文件,将端口配置改为长格式声明:
... ports: - target: 25565 published: 25565-25570 protocol: tcp mode: host ...
修改后先执行docker compose down清理原有占用端口的容器,再执行docker compose up --scale minecraft=2 -d即可实现每个实例分配一个端口段内的宿主机端口。
方案2:自动分配随机宿主机端口
如果不需要固定端口段,可简化端口配置,仅声明容器端口即可:
... ports: - 25565 ...
Docker会自动为每个实例分配互不冲突的高位宿主机端口,可通过docker compose ps或docker compose port <服务名> <容器端口>查询对应映射端口。
内容的提问来源于stack exchange,提问作者Gabe
相关产品推荐
相关产品推荐

