为什么docker-compose移除其他正在运行的conainters?

时间:2017-04-25 23:55:50

标签: docker docker-compose

我构建了一个docker镜像,并使用docker-compose up命令启动了一个容器。然后我修改了容器并执行了docker commit命令。当我尝试使用新创建的图像启动容器时,它会启动新容器但会破坏旧容器。当我下次尝试启动旧容器时,它会销毁新容器并启动旧容器。我很困惑。 docker / docker-compose应该这样做吗?

我正在运行的命令

docker-compose -f docker-compose.yml up -d 

docker-compose文件($ IMAGE_NAME和$ CONTAINER_NAME与启动旧容器和新容器不同)

version: '2'                                                                                                                       
services:
  yolo:
    build:
      context: .
      dockerfile: Dockerfile
    image: $IMAGE_NAME
    container_name: $CONTAINER_NAME
    ports:                      
      - "$EXTERNAL_SSH_PORT:22"

docker version:

docker --version
Docker version 1.12.3, build 6b644ec

docker-compose版本:

docker-compose --version
docker-compose version 1.9.0, build 2585387

1 个答案:

答案 0 :(得分:2)

我的问题与此有关:

https://github.com/docker/compose/issues/3472

值得注意的是:

  

@kachkaev这不是一个错误,与缓存无关。

     

你的目录都被命名为同一个东西(docker),所以当你   在任何一个目录中运行docker-compose,你正在处理同样的事情   项目。每次更新相同的配置   service(web)更改图像名称和容器名称。

     

看起来你真正想要的是两个独立的应用程序,每个都有   它自己的形象和容器。在那种情况下,我建议做   以下内容:

     

重命名每个目录,使它们不同或使用   --project-name选项或COMPOSE_PROJECT_NAME环境变量,为每个应用程序设置不同的项目名称。例如,myappdev和   myappprod。从两个Compose文件中删除container_name选项 -   这是不必要的。如果你在两个目录中运行docker-compose,   你现在应该有两个容器:myappdev_web和myappprod_web。