码头工人与pycharm 5

时间:2015-11-08 20:02:38

标签: python django docker pycharm docker-compose

我尝试为django应用程序构建基于docker的开发框。它运行顺利。

直到有一个很好的IDE集成,我的团队成员才会关心这一点,因此我发挥了新的闪亮Docker Support in pycharm 5

我遵循了链接文档,pycharm确实识别了我的Web容器及它的python解释器。

这是我的docker-compose.yml:

web:
  build: .
  ports:
    - "8000:8000"
  volumes:
    - .:/srv/app
  links:
    - database
    - search
    - cache
  entrypoint: /home/deployer/web-entrypoint.sh


worker:
  build: .
  volumes:
    - .:/srv/app
  command: celery -A core worker -l info
  links:
    - database
    - search
    - cache

database:
  image: postgres:latest
  volumes_from:
    - data
  environment:
    - POSTGRES_USER=app_user
    - POSTGRES_PASSWORD=app_password

data:
  image: busybox
  volumes:
    - /var/lib/postgresql/data

search:
  image: "elasticsearch:1.7"
  command: "elasticsearch --http.bind_host=0.0.0.0"
  ports:
    - "9200:9200"

cache:
  image: "redis:latest"
  ports:
    - "6379"

不幸的是,pycharm中没有docker-compose支持,这就是为什么djangos runserver在连接到数据库时失败的原因。因此,我从Web容器/etc/host复制了(幸运的是可预测的)别名:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'app_db',
        'USER': 'app_user',
        'PASSWORD': 'app_password',
        'HOST': 'docker_database_1',
        'PORT': '5432',
    }
}

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://docker_search_1:9200/',
        'INDEX_NAME': 'app',
    },
}

BROKER_URL = 'redis://docker_cache_1:6379/0'
CELERY_RESULT_BACKEND = BROKER_URL

现在数据库连接错误不再存在,但是我的django服务器的输出给了我这个:

a6993f56e61e:python -u /opt/project/manage.py runserver docker:8001 --traceback
Performing system checks...

System check identified no issues (0 silenced).
November 08, 2015 - 19:54:29
Django version 1.8.6, using settings 'core.settings.dev'
Starting development server at http://docker:8001/
Quit the server with CONTROL-C.
Error: [Errno -2] Name or service not known

Process finished with exit code 1

没有堆栈跟踪,只是这个。

奇怪的是什么:python -u /opt/project/manage.py - 这是什么?该文件夹在主机和容器上都不存在。

我的Django Server conf:

Django server conf

我也试过像这样的纯蟒蛇:

Pure Python Implementation

这就像巨大的混乱,因为它再次尝试通过"数据库"链接,即使我从设置中删除它。

接下来的调试步骤是什么?

奖金问题:pyCharm确实识别项目设置中已安装的软件包,但它无法在代码中找到它,为什么?

Failed import from dist-packages

更新

我发现pyCharm正在为自己启动容器,并且没有使用现有的docker容器。因此,看起来pyCharm只能使用单个容器,这似乎根本没用。

2 个答案:

答案 0 :(得分:5)

事实证明,pycharm 5每个项目只支持一个容器。基本上,转换为“Docker支持在pyCharm 5中无用”。

此处要求在docker compose之上进行多容器管理,正在等待您的upvote:

https://youtrack.jetbrains.com/issue/IDEA-137765

答案 1 :(得分:1)

我有一个解决方案。我设置了一个像你的一样的docker-compose(postgres,redis,solr)。它设置为使用自定义DJANGO_SETTINGS_MODULE(称为settings.docker)来查找要在服务中使用的DOCKER_IP环境变量。一切正常。

然后尝试使用Pycharm让它与docker集成一起工作,因为我正在运行Windows(因此是docker-machine),我只能在分离模式下进行docker-compose运行。对shell来说不是很有用。但Pycharm中的那个(你发现)运行另一个容器,shell工作正常。因此,即使在必须以分离模式运行的Windows / mac机器上,您也可以获得django shell。

此外,测试,runserver和任何其他管理命令在PyCharm和调试/断点工作正常。

runserver配置: runserver configuration

解释: interpreter

在settings.docker中我们有

DOCKER_IP = os.environ.get('DOCKER_IP', '127.0.0.1')
# database
DATABASES = {
    'default': {
        'ENGINE': 'transaction_hooks.backends.postgis',
        'USER': 'postgres',
        'NAME': "dbuser",
        'HOST': DOCKER_IP,
        'POST': 5432,
        'CONN_MAX_AGE': None,
    },
}
# redis
REDIS_URL = "redis://%s:6379/1" % DOCKER_IP

你明白了