docker compose会重新创建正在运行的容器,尽管docker-compose.yml中有不同的容器名称
我有一个简单的docker-compose.yml文件:docker compose会重新创建正在运行的容器,尽管docker-compose.yml中有不同的容器名称,docker,docker-compose,Docker,Docker Compose,我有一个简单的docker-compose.yml文件: services: app: build: . image: team/repo:$VERSION ports: - "$PORT:3000" container_name: myname-$VERSION volumes: - $DB_PATH:/db - ./tmp:/tmp environment: DB_PATH: /db v
services:
app:
build: .
image: team/repo:$VERSION
ports:
- "$PORT:3000"
container_name: myname-$VERSION
volumes:
- $DB_PATH:/db
- ./tmp:/tmp
environment:
DB_PATH: /db
volumes:
db:
tmp:
在定义例如VERSION=1.0.0
和PORT=80
之后,我使用以下命令启动容器:
docker-compose up -d
它创建了一个容器“myname-1.0.0”。之后,如果我重新导出我的env。var
。e、 g.VERSION=1.0.1
和PORT=8080
并重新运行该命令,它会停止正在运行的容器并启动新容器“byname-1.0.1”。但信息是:
正在重新创建myname-1.0.0。。。完成
“docker ps”仅显示新容器“myname-1.0.1”,但我希望看到这两个容器分别在端口80
和8080
上运行;分别来自两个不同的图像“团队/回购:1.0.0”和“团队/回购:1.0.1”
让两个容器并排运行的正确步骤是什么?谢谢你的指点,谢谢 您需要在docker compose中指定arg构建,如下所示:
services:
app:
build:
context: .
args:
- VERSION
image: team/repo:$VERSION
ports:
- "$PORT:3000"
container_name: myname-$VERSION
volumes:
- $DB_PATH:/db
- ./tmp:/tmp
environment:
DB_PATH: /db
volumes:
db:
tmp:
然后像这样开始:
docker-compose up -d --build
Docker Compose使用容器上的标签来记住哪个容器与哪个Compose文件一起使用。容器名称本身不用于此操作。(在早期版本的
fig
中,这不是真的,但事实已经如此。)
作曲有一种音乐的概念。这有几个影响。一个是项目名称被放在容器标签中,因此在不同项目名称下部署的相同docker compose.yml
版本被视为不同的项目。另一个原因是,基于项目和服务名称,container\u name:
有一个默认值
因此,如果您:
容器名称:
,让Docker Compose为您构建一个无冲突的默认值;及VERSION=1.0.0 PORT=80 COMPOSE_PROJECT_NAME=project-100 \
docker-compose up
VERSION=1.0.1 PORT=8080 COMPOSE_PROJECT_NAME=project-101 \
docker-compose up