尽管docker-compose.yml中的container_name不同,但docker-compose仍会重新创建运行中的容器

时间:2019-07-29 08:48:16

标签: 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
volumes:
  db:
  tmp:

在我定义例如VERSION=1.0.0PORT=80,我以以下内容启动容器:

docker-compose up -d

它创建一个容器“ myname-1.0.0”。之后,如果我重新导出我的env. var。例如VERSION=1.0.1PORT=8080并重新运行命令,它将停止正在运行的容器并启动新的“ byname-1.0.1”。但消息是:

  

重新创建myname-1.0.0 ...完成

“ docker ps”仅显示新的容器“ myname-1.0.1”,但是我希望看到两个容器分别在端口808080上运行;并分别从两个不同的图像“ team / repo:1.0.0”和“ team / repo:1.0.1”中

使2个容器并排运行的正确步骤是什么?我将不胜感激任何指示,谢谢!

2 个答案:

答案 0 :(得分:2)

Docker Compose在容器上使用标签来记住哪个容器与哪个撰写文件一起使用。这样的容器名称不用于此目的。 (在fig的早期版本中并非如此,但since 2015确实如此。)

Compose具有project name的概念。这有几个影响。一种是将项目名称放入容器标签中,因此在不同项目名称下部署的同一docker-compose.yml的版本被视为不同项目。另一个是根据项目和服务名称,container_name:的默认设置。

因此,如果您满足以下条件,这应该对您有用:

  1. 删除container_name:,并让Docker Compose为您构造一个无冲突的默认值;和

  2. 使用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