我构建了一个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
答案 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。