You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Docker Compose在同一主机同时部署应用的多个独立版本?

同一主机用Docker Compose并行部署多版本应用的解决方案

当然可以实现,你遇到的问题根源是Docker Compose默认以当前目录名称作为项目标识符,两次执行命令用的是同一个项目,所以Compose会认为你要更新现有项目,从而替换掉之前的容器。只要让每个版本对应独立的Compose项目,就能实现并行部署,具体有几种方法:

方法1:用-p/--project-name指定独立项目名

直接在docker compose命令里通过-p参数给每个版本指定唯一的项目名,这样Compose会把它们当成完全独立的项目来管理:

VERSION=test1 docker compose -p my_project_test1 up -d
VERSION=test2 docker compose -p my_project_test2 up -d

这样两个版本的容器、网络等资源会完全隔离,不会互相覆盖。

方法2:结合环境变量配置项目名

可以修改你的compose.yaml,用Compose内置的COMPOSE_PROJECT_NAME变量来统一资源命名,这样更灵活:

services:
  db:
    name: ${COMPOSE_PROJECT_NAME}.db
    image: db:$VERSION
    networks:
      - my_bridge
  app:
    name: ${COMPOSE_PROJECT_NAME}.app
    image: app:$VERSION
    networks:
      - my_bridge

networks:
  my_bridge:
    name: ${COMPOSE_PROJECT_NAME}_bridge

然后通过环境变量指定项目名和版本:

COMPOSE_PROJECT_NAME=my_project_test1 VERSION=test1 docker compose up -d
COMPOSE_PROJECT_NAME=my_project_test2 VERSION=test2 docker compose up -d

这种方式能让项目名和版本强关联,资源命名更规整。

方法3:用不同目录隔离分支代码

如果你的不同版本来自不同Git分支,可以把每个分支的代码复制到独立的目录中,比如./app-test1和./app-test2,然后分别进入对应目录执行docker compose up命令:

cd ./app-test1
VERSION=test1 docker compose up -d

cd ../app-test2
VERSION=test2 docker compose up -d

因为Compose默认会把当前目录名作为项目名,所以不同目录下的部署会自动隔离,不用额外加参数。

补充说明

你之前的配置里虽然给容器和网络加了$VERSION变量,但Compose的核心项目标识还是同一个,所以它会判定为同一项目的更新操作。只有通过项目名隔离,才能让Compose将不同版本视为独立的部署实例。

内容的提问来源于stack exchange,提问作者Guillaume Chérel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:35:11