我决定更改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 [...]使用。您必须删除(或重命名)该容器才能重用该名称。 错误:在启动项目时遇到错误。
如何将旧容器重新连接到新构图?
答案 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 containers,this comment mentions:
默认情况下,
snapshot.value as? [String: AnyObject]
使用yml文件的文件夹名称作为项目名称,并将该名称作为所有容器名称的前缀。
这可以解释为什么docker-compose up
没有获取新的容器名称。