【问题标题】:docker with pycharm 5码头工人与pycharm 5
【发布时间】:2015-11-08 20:02:37
【问题描述】:

我尝试为我们的 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 服务器配置:

我也尝试过这样的纯 python conf:

这有点令人困惑,因为它会再次尝试通过“数据库”链接进行连接,即使我完全从设置中删除了它。

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

额外问题:pyCharm 确实在项目设置中识别已安装的包,但在代码中找不到,为什么?

更新

我发现 pyCharm 正在为自己启动容器,而不是使用现有的 docker 容器。因此,看起来 pyCharm 只能与单个容器一起使用,这似乎根本没有那么有用。

【问题讨论】:

  • 更新了我的答案,因为我现在有一个在 pycharm 中运行良好的 docker-compose 环境,并具有完整的调试/测试/管理命令支持。我认为你几乎在你的配置中有它,除了不使用 docker-compose 短名称,而是使用 docker-machine 实例的环境变量。

标签: python django docker pycharm docker-compose


【解决方案1】:

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

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

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

【讨论】:

  • 这方面有什么消息吗?我有同样的问题,目前的支持有点没用。谁一次只使用一个容器?它基本上是一个没有 db 的应用程序,来自 pycharm 的奇怪选择
  • 在我的感觉中,jetbrains 增加了许多没有任何值的复选框功能。有很多错误和构思不佳的事情没有得到适当的关注,有利于在发行说明中添加最新的炒作流行语。
  • pycharm 中的 Docker 支持适用于 python 容器。它很高兴地让我的其他容器独自一人(就像它应该的那样)。它确实支持多个容器,因为我可以轻松启动多个运行服务器等。我还可以从 pycharm5 本身查看所有容器的日志、检查等。
【解决方案2】:

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

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

此外,测试、runserver 和任何其他管理命令在 PyCharm 中都可以正常工作,并且调试/断点也可以正常工作。

运行服务器配置:

翻译:

在 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

你懂的

【讨论】:

  • 你能连接到调试器吗?
  • 我通常使用 pydevd 远程调试器,甚至在本地(因为它快一点)。设置一个删除 pydevd 调试实例并连接到您的主机帖子。
  • 对此进行更新,它可以与调试器完美配合。无需复杂的 pydev 设置。我会用截图更新我上面的答案并回答任何问题。
猜你喜欢
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 2016-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-16
相关资源
最近更新 更多