Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
docker compose会重新创建正在运行的容器,尽管docker-compose.yml中有不同的容器名称_Docker_Docker Compose - Fatal编程技术网

docker compose会重新创建正在运行的容器,尽管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

我有一个简单的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
。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