我已经使用 minimum/docker-django-mysite 图像创建了一个纯 Python 项目来测试 Python 控制台功能。

我已经使用本地 Python 解释器测试了 Python 控制台,它工作正常。

但是当我将 Interpreter 更改为 Remote Docker Interpreter 时,我得到的只是以下输出:



现在,我已经能够在容器运行时(在它超时之前)将 docker exec 一个 bash shell 放入容器中,并看到控制台进程已启动并正在监听随机端口。

此外,该临时容器的 Docker 日志显示了两个数字,其中一个是它正在监听的同一本地端口(所以我猜另一个与要连接的预期外部主机端口或类似的东西有关)。

时间过去了,进程和容器都被杀死了。

顺便说一句,Docker 容器对于运行/调试配置正常工作,因此它能够启动远程进程。

已经可以使用pydevd启动从容器到IDE的调试服务端回调,调试代码正常,不知道哪里出错了。

我认为临时容器没有公开其端口,所以我不知道 IDE 期望如何连接到该容器上的进程。

谢谢你的帮助。

最佳答案

我遇到了这个确切的问题,问题似乎是我的 docker 容器和 PyCharm 自动生成的 docker 容器的克隆都缺少环境变量。

这是在 Django 中解决此问题的临时方法,首先打开:

首选项 > 构建执行部署 > 控制台 > Django 控制台

默认 Django 控制台启动脚本:

import sys
print('Python %s on %s' % (sys.version, sys.platform))
print(sys.executable)
import django;
print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)

您需要在这里手动注入(inject)您的环境变量,否则解释器将无法读取 POSTGRES_ENV_,如下所示:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': os.environ["POSTGRES_ENV_DB_NAME"],
        'USER': os.environ["POSTGRES_ENV_POSTGRES_USER"],
        'PASSWORD': os.environ["POSTGRES_ENV_POSTGRES_PASSWORD"],
        'HOST': os.environ["POSTGRES_PORT_5432_TCP_ADDR"],
        'PORT': os.environ["POSTGRES_PORT_5432_TCP_PORT"],
    }
}

所以只需简单地运行:
docker exec -it CONTAINER_ID python -c 'import os; print(os.environ)'

并将输出复制到剪贴板。最后,更新您的 Django 控制台启动脚本:
import os
os.environ = {"POSTGRES_ENV_DB_NAME":foo, "POSTGRES_ENV_POSTGRES_USER":bar}

import sys
print('Python %s on %s' % (sys.version, sys.platform))
print(sys.executable)
import django;
print('Django %s' % django.get_version())
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])
if 'setup' in dir(django): django.setup()
import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)

确保 PROJECT_ROOT & WORKING_DIR_AND_PYTHON_PATHS 也不需要手动设置。

关于python - Pycharm 2017.1 EAP Python 控制台和远程 Docker 解释器不能一起工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42445837/

10-16 18:25