Docker Compose如何在服务版本升级时重新创建容器?

时间:2020-02-07 08:49:36

标签: docker docker-compose

当我运行docker compose up命令时,将docker-compose.yml用作容器部署服务,每当我再次升级服务版本并重新部署服务时,就可以重新部署服务,而不会出现任何问题。

我不确定docker-compose如何跟踪使用docker compose文件创建的容器。我对此有疑问,因为如果使用相同配置手动创建容器,而现在使用docker compose文件来部署服务。 docker compose文件失败,说明该服务的容器已存在。如果docker compose在容器已经存在的情况下给出此错误,为什么在我们升级版本并因此重新部署容器时却没有给出相同的错误。

要注意的重要一点是,我不使用docker compose使用项目名称创建容器的标准约定,而是为每个服务容器提供一个名称。

先谢谢了。可能是这个问题并未完全说明目的,但我是Docker compose的新手,我需要了解docker compose的工作架构。

1 个答案:

答案 0 :(得分:1)

Compose在启动的容器上内部设置labels。如果您特别感兴趣,可以在docker inspect低级调试输出中看到这一点

"Labels": {
    "com.docker.compose.config-hash": "92b5b683f86166dd554c49250c5b76f1bce2158fdccfa2047720e50cfc9b18fa",
    "com.docker.compose.container-number": "1",
    "com.docker.compose.oneoff": "False",
    "com.docker.compose.project": "x",
    "com.docker.compose.project.config_files": "docker-compose.yml",
    "com.docker.compose.project.working_dir": "********",
    "com.docker.compose.service": "http",
    "com.docker.compose.version": "1.25.2"
}

这里有足够的棘手细节,我不会尝试使用docker run选项来模仿。只需重新运行docker-compose up -d,并为您重新创建事物即可。

您提到自己遇到了麻烦,因为您明确设置了container_name:。通常没有必要。 Compose CLI包含大多数有用的Docker CLI命令,并通过其Docker Compose服务名称来寻址容器;在the Compose networking environment中,服务名称可用作主机名。让Compose分配容器名称可以避免发生您所描述的冲突。