我有同一个应用程序的两个副本,我想将它们部署在一个集群中,我现在正在使用
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 地址。
注意:更改端口选择代码不是一个选项,这是一个第三方库,坦率地说,这是一个常规模式。
我想你已经交换了端口。第一个端口是 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。