docker与pycharm 5

我尝试为我们的Django应用程序构build一个基于Docker的开发框。 运行顺利

我的团队成员都不会在意,直到有一个不错的IDE集成,所以我玩pycharm 5中新的和shiny的Docker支持 。

我跟着链接的文档和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服务器conf:

Django服务器conf

我也尝试了像这样的纯pythonconfiguration文件:

纯粹的Python实现

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

接下来的debugging步骤是什么?

奖金的问题:pyCharm确认在项目设置中安装的软件包,但它不能在代码中find它,为什么?

从dist-packages导入失败

UPDATE

我发现pyCharm正在为自己启动容器,并没有使用现有的docker容器。 因此,它看起来像pyCharm只能使用一个容器,似乎并没有那么有用。

事实certificate,pycharm 5每个项目只支持一个容器。 基本上这意味着“在pyCharm 5中Docker的支持是无用的”。

docker工作人员可以在此进行多容器pipe理,并正在等待您的注意:

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

我有一个解决scheme。 我设置了一个docker-compose有点像你的(postgres,redis,solr)。 它被设置为使用一个定制的DJANGO_SETTINGS_MODULE(称为settings.docker)来查找在服务中使用的DOCKER_IP环境variables。 一切正常。

然后,当我运行Windows(因此docker-machine)时,试图使用Pycharm来与Docker集成工作,我只能在分离模式下执行docker-compose运行。 对于一个shell来说不是很有用。 但是Pycharm中的一个(正如你发现的那样)运行另一个容器,并且shell运行良好。 所以你甚至可以在一个windows / mac机器上运行在分离模式下的django shell。

另外testing,runserver和任何其他pipe理命令在PyCharm和debugging/断点工作正常工作。

runserverconfiguration: runserver配置

解释: 翻译员

在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 

你明白了