docker compose服务的扩展导致端口冲突

docker compose服务的扩展导致端口冲突,docker,docker-compose,Docker,Docker Compose,我在docker compose.yml中以以下方式定义了一个服务: 版本:“3” 服务: 网状物: 图片:nginx 端口: - 8080-8082:80 当我尝试使用命令启动此服务的三个实例时 docker compose up-d——缩放web=5-d 一个实例已启动,但当docker compose尝试启动其他实例时,它们会生成错误消息 ERROR: for nginxtest_web_1 Cannot start service web: Ports are not availa

我在
docker compose.yml
中以以下方式定义了一个服务:

版本:“3”
服务:
网状物:
图片:nginx
端口:
- 8080-8082:80
当我尝试使用命令启动此服务的三个实例时

docker compose up-d——缩放web=5-d
一个实例已启动,但当docker compose尝试启动其他实例时,它们会生成错误消息

ERROR: for nginxtest_web_1  Cannot start service web: Ports are not available: listen tcp 0.0.0.0:8080: bind: Only one usage of each socket address (protocol/network address/port) 
is normally permitted.
有时两个实例成功启动,但只有一个实例失败。运行时行为似乎非常随机。显然,docker compose将同一主机端口分配给多个nginx实例。当我再重复上述命令两次时,所有实例都会使用分配的不同主机端口启动。其他docker图像也会发生此错误。当我在
docker compose.yml
文件中省略主机端口范围时,会分配不同的随机主机端口,并且一切正常

我在Windows10(WSL2)上使用DockerVersion19.03.12和DockerCompose 1.29.0

这是docker编写的bug吗?有什么解决办法吗

更新: 当然,我只扩展到3个实例(主机端口范围内的端口数)

docker compose up-d——缩放web=3-d

似乎已经使用了范围
8080-8082
中的一些端口。此外,在扩展到5个服务时,您只指定了3个端口

使用类似的方法,不要指定端口范围,让docker自动选择可用的空闲端口

version : "3"

services:
  web:
    image: nginx
    ports:
      - 80

我只缩放到了3个实例,很抱歉在我的原始帖子中出现了错误(请参阅更新)。我还检查了指定范围内的所有端口是否都可用。尝试不同的端口范围(例如50000:50002)会导致相同的问题。您的解决方案可行,但我必须完全控制分配的端口。使用您的解决方案,可以获得三个具有随机主机端口的实例。