我在使用docker-compose运行pycharm时遇到问题。 我在一个容器里面放了Django,在另一个容器里面放了一个postgres。
奇怪的是:我在使用pycharm调试模式时也遇到以下错误(当我通常运行pycharm时也是如此)
服务器是否在主机“db”(127.0.53.53)上运行并接受 端口5432上的TCP / IP连接?
当我在命令行中使用“docker-compose up”运行它时,一切都很好。
我的pycharm版本和os信息:
PyCharm 2017.1
Build #PY-171.3780.115, built on March 24, 2017
JRE: 1.8.0_112-release-736-b13 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.12.3
我不确定pycharm如何与docker一起使用。它有自己的版本吗?
我的docker-compose版本信息:
docker-compose version 1.11.2, build dfed245
docker-py version: 2.2.0
CPython version: 2.7.10
OpenSSL version: OpenSSL 0.9.8zh 14 Jan 2016
我的docker-compose文件如下所示:
version: '2.1'
services:
db:
image: postgres
restart: always
ports:
- "5432:5432"
healthcheck:
test: "exit 0"
retries: 3
timeout: 10s
interval: 3s
web:
build: .
restart: always
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
db:
condition: service_healthy
我猜它的健康检查不受支持。 healthcheck的目的是,web图像一直等到postgres真正成功启动。如果我跳过这个,我将得到与pycharm相同的错误。
答案 0 :(得分:1)
我最近在Pycharm 2017.3上使用docker-compose.yml
时出现问题,我所遇到的错误似乎与我在docker-compose
文件中的健康检查配置有关
Can not deserialize insurance of java.util.ArrayList out of START_OBJECT token at [Source: N/A; line: -1, column: -1] (through reference chain:
com.intellij.docker.compose.configuration.beans.v2.DockerComposeConfigurationV2["services"]->java.utillInkedHashMap["web"]->com.intellij.docker.compose.configuration.beans.v2.DockerComposeServiceV2["depends_on"])
我从使用健康检查配置切换到使用waisbrot/wait泊坞窗图像以确保Postgres已准备就绪,配置如下:
version: '2.1'
services:
db:
image: postgres
restart: always
ports:
- "5432:5432"
web:
build: .
restart: always
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
wait:
image: waisbrot/wait
links:
- db
environment:
- TARGETS=db:5432
希望这有帮助。
我已经使用waisbrot/wait
遇到了一些问题,并在我的docker-compose
文件中更改为control startup order方法,如下所示,发现它在Pycharm 2017.3(OSX)上按预期工作,也确保数据库服务可用并且可供web
容器使用。 (在使用waisbrot/wait
方法时遇到问题的Jenkins构建时,这也经过了测试。
您需要确保为web
容器使用正确的脚本版本,bash
或sh
(Alpine使用sh
)。
version: '3.1'
services:
db:
image: postgres
restart: always
ports:
- "5432:5432"
web:
build: .
restart: always
command: ./wait-for.sh db:5432 -- python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db