我有一个简单的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
volumes:
db:
tmp:
在我定义例如VERSION=1.0.0
和PORT=80
,我以以下内容启动容器:
docker-compose up -d
它创建一个容器“ myname-1.0.0”。之后,如果我重新导出我的env. var
。例如VERSION=1.0.1
和PORT=8080
并重新运行命令,它将停止正在运行的容器并启动新的“ byname-1.0.1”。但消息是:
重新创建myname-1.0.0 ...完成
“ docker ps”仅显示新的容器“ myname-1.0.1”,但是我希望看到两个容器分别在端口80
和8080
上运行;并分别从两个不同的图像“ team / repo:1.0.0”和“ team / repo:1.0.1”中
使2个容器并排运行的正确步骤是什么?我将不胜感激任何指示,谢谢!
答案 0 :(得分:2)
Docker Compose在容器上使用标签来记住哪个容器与哪个撰写文件一起使用。这样的容器名称不用于此目的。 (在fig
的早期版本中并非如此,但since 2015确实如此。)
Compose具有project name的概念。这有几个影响。一种是将项目名称放入容器标签中,因此在不同项目名称下部署的同一docker-compose.yml
的版本被视为不同项目。另一个是根据项目和服务名称,container_name:
的默认设置。
因此,如果您满足以下条件,这应该对您有用:
删除container_name:
,并让Docker Compose为您构造一个无冲突的默认值;和
使用docker-compose -p
option或$COMPOSE_PROJECT_NAME
environment variable明确指定项目名称。
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
答案 1 :(得分:0)
您需要像这样在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