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

docker-compose container name use dash (-) instead of underscore (_)

我一直在 Ubuntu 上使用 docker-compose,在这种环境下,容器的命名带有下划线:

但现在,我切换到 Windows 10(使用 Docker 桌面)并且命名约定已更改:

我不知道这是否与 OS 相关,但这是一个问题。我的脚本失败了,因为它们依赖于用下划线命名的容器。

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

此命名约定差异似乎是 Docker Compose 版本 v1 (Python) 和 v2 (Go) 之间的差异。与 Docker Desktop 打包在一起的最新 docker/compose 存储库是此分支中 docker/compose v2 branch. Looking at the source code here 中的 golang 版本:

// Separator is used for naming components
var Separator = "-"

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

    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)
            )

关于解决这个问题,您可能需要卸载 Docker Desktop 中包含的 compose 并恢复到 1.28.x 版本。 compose readme says you can use pip install docker-compose to install. The compose docs have a section about upgrading this and commands to migrate to v2: https://docs.docker.com/compose/install/#upgrading 但你的问题表明你想保留 _ v1 命名约定。

如评论中所述,以下选项保留了撰写兼容性:

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

其他文档链接:

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

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

只是为了避免人们精神错乱:Docker 桌面包装似乎有问题。

我是 运行 Docker Desktop 4.3.0 (71786) Windows 11,使用 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

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

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

% 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

在 GitHub 版本中,- 被用作分隔符,正如预期的那样。

这意味着 Docker 不只是重新打包 GitHub 上可用的二进制文件,而是从不同于 GitHub 上标有相同版本的源树中构建自己的构建=63=]。 (感谢 指出定义分隔符的代码行!)

最后的一些注意事项:

  • docker-从其他最新版本的 Docker 桌面编写,如预期的那样使用 -
  • -_之间的切换不是第一次了。有趣的是,我记得几个月前遇到过同样的问题,但升级后它就消失了。
  • 如果您不破坏环境,docker-compose up 将使用现有的容器名称。这意味着您可能需要一段时间才能注意到变化。
  • 我已将此报告给 Docker 的 GitHub Issue Tracker Windows。

我们注意到命令

docker compose updocker-compose up

会给出 _ 或 - 取决于您使用的是哪个。