ubuntu24.04中docker.errors.DockerException: Error while fetching server API version: HTTPConnection.request() got an unexpected keyword argument ‘chunked’

docker-compose up时出现以上错误信息。

虽然这个问题是python的urllib问题,但在低版本的(比如ubuntu20.04)不会出现,如果用的是24.04之类最新版本,直接用docker-compose-v2版本。

apt remove docker-compose
apt install docker-compose-v2

v2的命令稍微不同,docker compose up -d

Compose V1 跟 Compose V2 的不同

  1. docker-compose vs docker compose
    不同于V1,V2 集成到了命令行,推荐的语法是 docker compose 。
    Docker 命令行提供了一些参数和标签,比如: DOCKER_HOST环境变量、–context 命令行标签。
    这种变化使得可以在 root docker命令使用所有的共享标签。比如:docker –log-level=debug –tls compose up 开启 debug 日志,开启 tls 支持。
  2. Service container names
    Compose 生成的容器名基于 project name、 service name 和 scale/replica count。

在Compose V1, 下划线 (_) 作为单词分隔符。在Compose V2,中横线 (-) 作为单词分隔符。

下划线在DNS hostname中是不合法字符。通过使用中横线,Compose V2 确保容器可以通过hostname访问到。

比如:Compose 命令 -p myproject up –scale=1 svc ,在Compose V1的结果是 myproject_svc_1,在Compose V2的结果是 myproject-svc-1。

注意:
在 Compose V2 中, –compatibility全局标签 or COMPOSE_COMPATIBILITY环境变量保留了 Compose V1操作,可以使用下划线(_)作为单词分隔符。由于必须为每次运行Compose V2命令指定此选项,因此建议您在转换到Compose V2时仅将其用作临时措施。

  1. Command-line flags and subcommands
    Compose V2几乎支持所有Compose V1的标签和子命令,因此在大多数情况下,脚本中可插拔式替换。

V2 不支持的操作
docker-compose scale,替换为 docker compose up –scale
docker-compose rm –all
V2 的不同处
Compose V1 Compose V2
–compatibility Deprecated. Migrates YAML fields based on legacy schema version. Uses _ as word separator for container names instead of – to match V1.
ps –filter KEY-VALUE Undocumented. Allows filtering by arbitrary service properties. Only allows filtering by specific properties, e.g. –filter=status=running.

  1. 环境变量
    Compose V1中的环境变量行为没有正式记录,在某些边缘案例中表现不一致。

对于Compose V2,环境变量涵盖了优先级和.env文件,还包括许多棘手的情况,如 转义嵌套引号。

Was this helpful?

0 / 0

发表回复 0