通过保留容器来重命名项目

时间:2016-12-31 10:23:22

标签: docker docker-compose

我决定更改docker组合的项目名称:

$ docker-compose -p old_name up -d # Before
Starting old_name_web_1
$ docker-compose -p new_name up -d # After
Creating new_name_web_1

但我不想删除我的容器,因此我将其重命名为:

$ docker rename old_name_web_1 new_name_web_1
...

我认为docker-compose基于容器名称,但似乎并非如此:

$ docker-compose -p new_name up -d
  

错误:for web无法为服务Web创建容器:冲突。名称" / new_name_web_1"已被容器4930deaabb [...]使用。您必须删除(或重命名)该容器才能重用该名称。   错误:在启动项目时遇到错误。

如何将旧容器重新连接到新构图?

2 个答案:

答案 0 :(得分:4)

看起来您正在使用较新版本的docker compose,它通过分配给它们的标签而不是按名称来跟踪容器。这就是为什么重命名容器不起作用。

更新标签

您可以通过docker inspect命令检查容器的标签。

$ docker inspect --format='{{json .Config.Labels }}' container_name

项目名称是' com.docker.compose.project'的值。标签

将现有容器移动到新项目就像更改该标签的值一样简单。但是,Docker CLI尚不支持它。有an open issue requesting that feature

解决方法

仍然可以通过直接编辑该特定容器的配置文件来实现。在那里,您将找到当前分配给该容器的标签。

$ nano /var/lib/docker/containers/$container_id/config.v2.json

将新项目名称分配给' com.docker.compose.project'标签并保存文件。接下来,您必须重新启动守护程序。否则,docker将无法看到更改。

$ systemctl daemon-reload

答案 1 :(得分:1)

虽然这是真的docker-compose reuse existing containersthis comment mentions

  默认情况下,

snapshot.value as? [String: AnyObject]使用yml文件的文件夹名称作为项目名称,并将该名称作为所有容器名称的前缀。

这可以解释为什么docker-compose up没有获取新的容器名称。