docker-compose 容器名称使用破折号 (-) 而不是下划线 (_)

jaw*_*ira 54 containers docker docker-compose docker-desktop

我总是在 Ubuntu 上使用 docker-compose,在这个环境中容器用下划线命名:

  • <项目>_<服务>_<副本>

但现在,我切换到 Windows 10(使用 Docker Desktop)并且命名约定发生了变化:

  • <项目>-<服务>-<副本>

在此输入图像描述

我不知道这是否取决于操作系统,但这是一个问题。我的脚本失败了,因为它们依赖于以下划线命名的容器。

有没有办法自定义它并使用下划线而不是破折号?

ten*_*ive 70

这种命名约定差异似乎是 Docker Compose 版本 v1 (Python) 和 v2 (Go) 之间的差异。与 Docker Desktop 一起打包的最新 docker/compose 存储库是docker/compose v2 分支中的 golang 版本。查看此分支中的源代码

// Separator is used for naming components
var Separator = "-"
Run Code Online (Sandbox Code Playgroud)

python分支源代码使用_组件的命名约定,例如

    def rename_to_tmp_name(self):
        """Rename the container to a hopefully unique temporary container name
        by prepending the short id.
        """
        if not self.name.startswith(self.short_id):
            self.client.rename(
                self.id, '{}_{}'.format(self.short_id, self.name)
            )
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,您可能需要卸载 Docker Desktop 附带的 compose 并恢复到 1.28.x 版本。撰写自述文件 说您可以使用它pip install docker-compose来安装。compose 文档有一个关于升级此版本以及迁移到 v2 的命令的部分: https: //docs.docker.com/compose/install/#upgrading但您的问题表明您希望保留_v1 命名约定。

正如评论中提到的,以下选项保留了撰写兼容性:

  1. 在命令中使用--compatibility标志docker-compose
  2. 设置COMPOSE_COMPATIBILITY=true环境变量

其他文档链接:

  • 很好的答案,谢谢你,我发现 `--compatibility` 标志保持了 v1 行为:`docker-compose --compatibility up -d` (7认同)
  • 您还可以使用“COMPOSE_COMPATIBILITY=true”环境变量代替“--compatibility”选项。 (6认同)

jaw*_*ira 12

上次 Docker Desktop 更新后,“docker-compose”自动降级到 v1。

现在有一个新选项可以选择“docker-compose”版本,默认情况下该选项是禁用的:

在此输入图像描述


m00*_*000 6

只是为了让人们免于疯狂:Docker Desktop 打包似乎有问题。

我在 Windows 11 上运行 Docker Desktop 4.3.0 (71786),并使用 WSL2 后端。

码头工人桌面

以下是我的终端中的 docker-compose 信息:

% which docker-compose
/usr/bin/docker-compose
% ls -al /usr/bin/docker-compose
lrwxrwxrwx 1 root root 56 Dec   9 19:52 /usr/bin/docker-compose -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose
% sha256sum /usr/bin/docker-compose
35dd89af6820dc111991f4c9b8ed7b253fefa33a30392fed506490ddc2553e91 /usr/bin/docker-compose
% docker-compose --version
Docker Compose version v2.2.1
Run Code Online (Sandbox Code Playgroud)

Docker Desktop 已全新安装。在此版本中,_用作分隔符。

现在,让我们切换到从GitHub下载的相同版本的 docker-compose :

% sudo wget -q https://github.com/docker/compose/releases/download/v2.2.1/docker-compose-linux-x86_64 -O /usr/local/bin/docker-compose-v2.2.1-gh
% sudo chmod 755 /usr/local/bin/docker-compose-v2.2.1-gh
% sudo ln -sf /usr/local/bin/docker-compose-v2.2.1-gh /usr/bin/docker-compose
% ls -al /usr/bin/docker-compose
lrwxrwxrwx 1 root root 39 Dec   9 20:18 /usr/bin/docker-compose -> /usr/local/bin/docker-compose-v2.2.1-gh
% sha256sum /usr/bin/docker-compose
68a3bb67bd25abf0f6da2a9d171a873ac182c3cc1c51fb4866e7770675823d2f  /usr/bin/docker-compose
% docker-compose --version
Docker Compose version v2.2.1
Run Code Online (Sandbox Code Playgroud)

在 GitHub 版本中,-如预期一样用作分隔符。

这意味着 Docker 不仅会重新打包 GitHub 上提供的二进制文件,还会从与 GitHub 上标记为相同版本的源树不同的源树中进行自己的构建。(感谢@tentative指出定义分隔符的代码行!)

最后一些注意事项:

  • docker-compose 来自其他最新版本的 Docker Desktop,-按预期使用。
  • -和之间的切换已经不是第一次_发生了。有趣的是,我记得几个月前也遇到过同样的问题,但升级后它就消失了。
  • 如果不破坏您的环境,docker-compose up将使用现有的容器名称。这意味着您可能需要一段时间才能注意到更改。
  • 我已将此问题报告给Windows 版 Docker 的GitHub 问题跟踪器。截至 2022 年底,该问题已得到解决。