【问题标题】:Rename a project by keeping containers通过保留容器重命名项目
【发布时间】:2016-12-31 10:23:21
【问题描述】:

我决定更改一个 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

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

如何将旧容器重新链接到新组合?

【问题讨论】:

  • 投反对票,因为 docker 的整个概念在这里被忽视了。在 docker 世界中,即使稍微关心容器被删除/重新创建也是错误的。容器的外观和处理方式应类似于 tmp 文件 - 您可以并且想要重新创建它们。
  • 不确定是否值得投反对票,因为我很清楚这个问题,但我明白你在说什么。它应该得到一个答案,尽管这会帮助像我这样可能没有正确思维方式的其他人。
  • 对这个问题的任何回答都完全是在滥用这个概念,从长远来看,它实际上会对你造成巨大伤害。由于您的问题不是关于“一般如何做 docker”,而是更具体,所以如果不回答完全不同的问题/不是最初的问题,我就无法给出答案。你真的应该深入了解,为什么你需要它,如果你需要它 - 以及在这种情况下你通常强迫了什么。像 swarm/kubernetes/rancher 这样的普通管理器会随时删除容器以“重新启动”堆栈。Container=not persistent

标签: docker docker-compose


【解决方案1】:

看起来您正在使用较新版本的 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

【讨论】:

  • 似乎这种解决方法不起作用(从 v19.03.1 开始)...config.v2.json 被重新写入它的原始值...也许停止/编辑/启动会工作得更好。
【解决方案2】:

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

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

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

【讨论】:

  • 目录名是项目命名的最后一个后备名,我这里用-p明确定义(顺便也重命名了目录)
  • @PierredeLESPINAY -p?我没有在您的问题中看到 -p。
  • 该死的,我在问题中输入了-f 而不是-p(我也在使用文件覆盖,这就是我混淆它们的原因),让我更新它。
  • @PierredeLESPINAY OK ;) 不过,我没有立即答复。
猜你喜欢
  • 1970-01-01
  • 2018-04-01
  • 2016-02-28
  • 2020-11-26
  • 2020-02-17
  • 1970-01-01
  • 2019-02-25
  • 2021-10-05
  • 2022-01-14
相关资源
最近更新 更多