docker 和 pycharm 5
docker with pycharm 5
我尝试为我们的 django 应用构建一个基于 docker 的开发框。 运行顺利
None 我的团队成员会关心这一点,直到有一个很好的 IDE 集成,因此我玩新的闪亮的 Docker Support in pycharm 5.
我遵循了 linked 文档,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:
这就像超级混乱,因为它再次尝试通过 "database" link 连接,即使我从设置中完全删除它也是如此。
接下来的调试步骤是什么?
加分问题:pyCharm在项目设置中确实能识别已安装的包,但在代码中却找不到,为什么?
更新
我发现 pyCharm 正在为自己启动容器,而不是使用现有的 docker 容器。因此看起来 pyCharm 只能与单个容器一起使用,这似乎根本没有用。
原来pycharm5只支持每个项目一个容器。基本上就是 "Docker support is useless in pyCharm 5".
此处请求 docker compose 之上的多容器管理,正在等待您的投票:
我有办法了。我设置了一个 docker-compose 有点像你的(postgres、redis、solr)。它设置为使用自定义 DJANGO_SETTINGS_MODULE(称为 settings.docker)来查找要在服务中使用的 DOCKER_IP 环境变量。一切正常。
然后尝试 Pycharm 让它与 docker 集成一起工作,因为我 运行ning Windows(因此 docker-machine ),我只能在分离模式下执行 docker-compose 运行。对于 shell 不是很有用。但是 Pycharm 中的那个(如您所见)运行 是另一个容器,而 shell 中的那个工作正常。因此,即使在必须 运行 处于分离模式的 windows/mac 机器上,您也可以获得 django shell。
另外测试,运行服务器和任何其他管理命令在 PyCharm 和 debug/breakpoints 中工作正常。
运行服务器配置:
口译员:
在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
你明白了
我尝试为我们的 django 应用构建一个基于 docker 的开发框。 运行顺利
None 我的团队成员会关心这一点,直到有一个很好的 IDE 集成,因此我玩新的闪亮的 Docker Support in pycharm 5.
我遵循了 linked 文档,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:
这就像超级混乱,因为它再次尝试通过 "database" link 连接,即使我从设置中完全删除它也是如此。
接下来的调试步骤是什么?
加分问题:pyCharm在项目设置中确实能识别已安装的包,但在代码中却找不到,为什么?
更新
我发现 pyCharm 正在为自己启动容器,而不是使用现有的 docker 容器。因此看起来 pyCharm 只能与单个容器一起使用,这似乎根本没有用。
原来pycharm5只支持每个项目一个容器。基本上就是 "Docker support is useless in pyCharm 5".
此处请求 docker compose 之上的多容器管理,正在等待您的投票:
我有办法了。我设置了一个 docker-compose 有点像你的(postgres、redis、solr)。它设置为使用自定义 DJANGO_SETTINGS_MODULE(称为 settings.docker)来查找要在服务中使用的 DOCKER_IP 环境变量。一切正常。
然后尝试 Pycharm 让它与 docker 集成一起工作,因为我 运行ning Windows(因此 docker-machine ),我只能在分离模式下执行 docker-compose 运行。对于 shell 不是很有用。但是 Pycharm 中的那个(如您所见)运行 是另一个容器,而 shell 中的那个工作正常。因此,即使在必须 运行 处于分离模式的 windows/mac 机器上,您也可以获得 django shell。
另外测试,运行服务器和任何其他管理命令在 PyCharm 和 debug/breakpoints 中工作正常。
运行服务器配置:
口译员:
在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
你明白了