我有一个Python Flask应用程序,希望在同一服务器上拥有多个实例,每个容器都有自己的输出端口(或DNS)和依赖项。我使用了docker-compose并且它工作得很好。
我看到scale
参数,但我认为它适用于类似负载均衡的情况,而不是拥有应用程序的不同版本。另一个解决方案是为一个应用程序拥有多个服务,并通过终端以其名称运行每个实例。
我有一个Python Flask应用程序,希望在同一服务器上拥有多个实例,每个容器都有自己的输出端口(或DNS)和依赖项。我使用了docker-compose并且它工作得很好。
我看到scale
参数,但我认为它适用于类似负载均衡的情况,而不是拥有应用程序的不同版本。另一个解决方案是为一个应用程序拥有多个服务,并通过终端以其名称运行每个实例。
docker-compose scale
命令已经过时,文档建议使用 docker-compose up --scale SERVICE=NUM
。但是,在指定端口进行扩展时需要小心。如果您尝试将容器放在端口 80
上五次,则其中四个将失败 - 该端口已被占用。但是有一个解决方案。
我刚刚测试了这种方法,它有效。下面是我测试的 docker-compose.yml
文件:
version: '3.7'
services:
test_app:
image: <my_custom_image>
ports:
- 10000-10003:80
然后我使用 docker-compose up --scale test_app=4
命令运行它,它在四个预先指定的端口上部署了 4 个实例的 test_app
应用程序: 10000
, 10001
, 10002
和 10003
。
希望我回答了你的问题。
一种选择是在您的Docker Compose文件中复制服务。这不是最优雅的选项,但是您可以指定容器正在侦听的端口。 例如:
services:
app1:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000" # Map host port 8000 to container port 8000
app2:
build:
context: .
dockerfile: Dockerfile
ports:
- "8001:8000" # Map host port 8001 to container port 8000
depends_on
指定其为依赖项。我希望所有容器之间都是隔离的。 - Artin Falahidocker-compose.yml
中放置在services
中的所有内容都将在同一个网络上,无论是否进行扩展。您可以通过在列出容器时看到的名称连接另一个容器。 - Kevin Kopf