我正在设置 PyCharm 的新实例,并想使用 docker-compose 设置 Python 解释器,但 PyCharm 似乎不喜欢我的 docker-compose 版本。
首先,在“构建、执行、部署”>“Docker”>“工具”中,它无法确定我正在使用的 docker-compose 的版本,因为 docker-compose 不再支持“-v”选项。
然后,当我添加 Docker Compose 类型的新 Python 解释器时,我从 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:
该错误似乎表明它不理解以下事实:build
财产在x-service-defaults
是一个对象而不是字符串,这是 3.x 语法。
更糟糕的是,如果我尝试修改 docker-compose.yml 来更改上述内容build
属性仅包含字符串“.”,那么我不会收到错误,但服务列表是错误的。
我希望得到以下选项core
or postgres
,因为这些是下面列出的选项services
但它列出了所有顶级选项:networks
, services
, volumes
, and x-service-defaults
.
值得注意的是,如果我从终端运行 docker-compose,那么它会很好地解析文件并完全按照我的预期运行我的容器。
Versions
我从 JetBrains 网站安装了 PyCharm,它向我保证它没有更新。它的版本为 2021.1.3,内部版本 #PY-211.7628.24。
我使用 Homebrew Docker Cask 安装了 Docker Desktop for Mac(并且不使用任何公式)。它还说没有新的更新。它的版本是 3.5.2 (66501),这意味着 Docker Engine 20.10.7 和 Compose 版本 v2.0.0-beta.6(这也是docker-compose --version
报告)。