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
属性 更改为字符串 '.',那么我不会'没有报错,但是服务列表是错误的。
我希望得到 core
或 postgres
的选项,因为这些是 services
下列出的选项,但它列出了所有顶级选项:networks
、services
、volumes
和 x-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 桌面设置中禁用它。
我正在设置 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
属性 更改为字符串 '.',那么我不会'没有报错,但是服务列表是错误的。
我希望得到 core
或 postgres
的选项,因为这些是 services
下列出的选项,但它列出了所有顶级选项:networks
、services
、volumes
和 x-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 桌面设置中禁用它。