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

我决定改变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 

错误:对于网站无法创build服务网站的容器:冲突。 名称“/ new_name_web_1”已被容器4930deaabb […]使用。 您必须删除(或重命名)该容器才能重新使用该名称。 错误:提出项目时遇到错误。

我怎样才能将我的旧容器重新连接到新的组合?

虽然这是真正的docker-compose重用现有的容器 , 这个评论提到 :

docker-compose默认使用yml文件的文件夹名称作为项目名称,并将该名称作为所有容器名称的前缀。

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

看起来你正在使用docker compose的新版本,它通过分配给它们的标签来跟踪容器而不是它们的名字。 这就是重命名容器不起作用的原因。

更新标签

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

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

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

将一个现有的容器移动到一个新的项目中就如同更改该标签的值一样简单。 但是它还不被Docker CLI支持。 有一个公开的问题,请求该function 。

解决方法

它仍然可以通过直接编辑该特定容器的configuration文件来实现。 在那里您会find当前分配给该容器的标签。

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

将新的项目名称分配给“com.docker.compose.project”标签并保存该文件。 接下来,你必须重启守护进程。 否则,这些更改将不会被docker看到。

 $ systemctl daemon-reload