Docker Compose 应用程序自动绑定到同一端口,但 compose 无法启动

问题描述 投票:0回答:1

我有同一个应用程序的两个副本,我想将它们部署在一个集群中,我现在正在使用

docker-compose
。此应用程序侦听端口 8000,如果端口繁忙,它会递增端口号,直到找到空闲端口(8001、8002 等)。这些端口用于应用程序相互通信,即 app1 将监听 8000 并在 8001 中与 app2 对话。

由于我使用

docker-compose
部署这些,每个容器都有自己的 IP 地址。这意味着两个应用程序 将绑定到端口 8000(因为从他们的角度来看它并不忙)。知道了这一点,我正在尝试将
ports
映射到 docker-compose.yml 文件中,如下所示

version: "3.9"
  services:
    app1:
      container_name: app1
      image: app:latest
      ports:
        - 8000:8000
    app2:
      container_name: app2
      image: app:latest
      ports:
        - 8000:8001

但是,当我尝试

docker-compose up
这件事时,它失败并出现以下错误

绑定 0.0.0.0:8000 失败:端口已分配

即它不能绑定相同的 container(内部) 端口,即使它们来自不同的容器并映射到不同的 host 端口。

app1
app2
都会选择端口 8000,因为从他们的角度来看是免费的,但我无法在外部映射它。我该如何解决这个问题?

我的偏好是每个

app
绑定到不同的端口,即整个组合设置应该共享相同的端口,即使容器具有不同的 IP 地址。

注意:更改端口选择代码不是一个选项,这是一个第三方库,坦率地说,这是一个常规模式。

docker docker-compose docker-networking
1个回答
0
投票

我想你已经交换了端口。第一个端口是 host 端口,第二个端口是内部 container 端口。

试试

version: "3.9"
  services:
    app1:
      container_name: app1
      image: app:latest
      ports:
        - 8000:8000
    app2:
      container_name: app2
      image: app:latest
      ports:
        - 8001:8000

这会将容器映射到主机端口 8000 和 8001。

© www.soinside.com 2019 - 2024. All rights reserved.