![如何防止docker-compose将哈希附加到创建的容器名称?](https://linux22.com/image/729132/%E5%A6%82%E4%BD%95%E9%98%B2%E6%AD%A2docker-compose%E5%B0%86%E5%93%88%E5%B8%8C%E9%99%84%E5%8A%A0%E5%88%B0%E5%88%9B%E5%BB%BA%E7%9A%84%E5%AE%B9%E5%99%A8%E5%90%8D%E7%A7%B0%EF%BC%9F.png)
我有一台带有多个 lxc 容器的服务器。一些容器中安装了 docker。通常,这些 LXC 容器中的 docker compose 操作会产生格式为 的容器名称appname_service_1
,例如wordpress_app_1
和wordpress_db_1
,当app
和db
是 compose 文件中调用的两个服务wordpress
时 - 您知道的。
但今天我创建了另一个 LXC 容器并在其中安装了 docker。得益于 ansible,设置与其他容器相同。但是,docker 容器名称不同,例如。wordpress_db_1_c9de200f9abd
每当我删除容器并重新创建它时,末尾的哈希都会有所不同。
由于这会破坏容器之间的所有路由,从而使容器不像它们应该的那样可丢弃,我想知道为什么要附加这些哈希。所有 LXC 容器都安装了相同的 docker 和相同的 docker-compose 版本。我想完全阻止这些哈希出现在我的 docker 容器名称中。
为什么它们现在会发生,而以前却没有发生?
答案1
这是 docker-compose 的新行为,与 swarm 模式的行为相似。它完全不影响通过网络连接容器的能力,因为服务名称的 DNS 别名始终包含在内,在您的情况下为app
和db
。无需使用完整的容器名称即可使用循环 DNS 连接到服务的副本。
来自发行说明:
重要的提示
此版本中 Compose 创建的容器的默认命名方案已从 更改为
<project>_<service>_<index>
,<project>_<service>_<index>_<slug>
其中<slug>
是随机生成的十六进制字符串。升级前,请务必相应更新依赖旧命名方案的脚本。
答案2
已在版本中修复1.23.2:
恢复了 1.23.0 版的一项更改,该更改将随机字符串附加到由 docker-compose up 创建的容器名称,从而导致可寻址性问题。注意:由 docker-compose run 创建的容器将继续使用随机生成的名称,以避免在并行运行期间发生冲突。