是否在pycharm 2017.1中支持docker healthcheck

时间:2017-03-26 06:52:38

标签: pycharm docker-compose

我在使用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相同的错误。

1 个答案:

答案 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容器使用正确的脚本版本,bashsh(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