PyCharm 无法解析 docker-compose.yml 以添加 Python 解释器,似乎使用的是旧版本

PyCharm can't parse docker-compose.yml to add Python interpreter, seems to be using old version

我正在设置 PyCharm 的新实例,并想使用 docker-compose 设置一个 Python 解释器,但是 PyCharm 没有似乎不喜欢我的 docker-compose 版本。

首先,在 Build, Execution, Deployment > Docker > Tools 中,它无法确定我正在使用的 docker-compose 的版本,因为 docker-compose 不再支持 '-v' 选项。

然后,当我添加一个新的 Python 类型 Docker Compose 解释器时,我从我的 docker-compose 文件中得到解析错误。它似乎认为该文件正在使用 2.x 语法,并且被新的语法选项搞糊涂了。

Error while parsing "/Users/_______/projects/________/docker-compose.yml": Cannot deserialize value of type 'java.lang.String' from Object value (token 'JsonToken.START_OBJECT') at [Source: UNKNOWN; line -1; column: -1] (through reference chain: java.util.LinkedHashMap["x-service-defaults"]->com.intellij.docker.compose.configuration.beans.v1.DockerComposeServiceV1["build"])

docker-compose 文件的精简版本仍然有此错误如下:

version: '3.4'

x-service-defaults:
  &service-defaults
  build:
    context: .
    dockerfile: Dockerfile
services:
  core:
    <<: *service-defaults
    command: /bin/bash -c "python /ci/healthcheck.py && python manage.py runserver 0.0.0.0:8000"
    volumes:
      - ./ci/:/ci
      - static:/usr/src/app/static

  postgres:
    image: postgres:12.6
    volumes:
      - .pgdata/:/var/lib/postgresql/data
      - ./docker-postgresql-multiple-databases:/docker-entrypoint-initdb.d
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres

volumes:
  static:

这个错误好像提示它没有理解x-service-defaults中的build属性是一个对象而不是字符串,也就是3.x语法。

更糟糕的是,如果我尝试修改 docker-compose.yml 以将上述 build 属性 更改为字符串 '.',那么我不会'没有报错,但是服务列表是错误的。

我希望得到 corepostgres 的选项,因为这些是 services 下列出的选项,但它列出了所有顶级选项:networksservicesvolumesx-service-defaults.

值得注意的是,如果我从终端 运行 docker-compose,那么它会很好地解析文件并且 运行 我的容器完全符合我的预期。

版本

我从 JetBrains 网站安装了 PyCharm,它向我保证它没有更新。它在版本 2021.1.3 上,构建 #PY-211.7628.24。

我使用 Homebrew Docker Cask(没有使用任何公式)为 Mac 安装了 Docker Desktop。它还说没有新的更新。它是版本 3.5.2 (66501),这意味着 Docker Engine 20.10.7 和 Compose 版本 v2.0.0-beta.6(这也是 docker-compose --version 报告的内容)。

原来答案是PyCharm目前不支持docker-compose version 2,因为它还处于测试阶段。我只是应该仍然使用 docker-compose 版本 1.29.2.

至于为什么我使用 docker-compose 版本 2,显然 Homebrew 上的 Docker cask 默认启用“使用 Docker Compose V2”实验功能。我能够在我的 Docker 桌面设置中禁用它。