Pycharm使用Docker容器Python作为远程解释器

时间:2019-07-23 05:55:51

标签: docker ssh pycharm portforwarding

我试图在远程计算机上的docker容器中使用python作为Pycharm中的解释器。由于这是一个大嘴巴,所以下面是一个图:

enter image description here

容器中运行着一个Jupyter Notebook,我可以通过本地浏览器连接到该笔记本(尽管这只是为了测试连接)。我用来启动Docker容器的命令是

docker run --runtime=nvidia -it --rm --shm-size=2g -v /home/timo/storage:/storage -v /etc/passwd:/etc/passwd -v /etc/group:/etc/group --ulimit memlock=-1 -p 8888:8888 -p 7722:22 --ipc=host latest:latest

我可以使用ssh -L 8888:0.0.0.0:8888 BBB.BBB.BBB.BBB转发运行Jupyter笔记本计算机的端口8888,从而在本地计算机上使用它。但是我不太喜欢使用Jupyter进行开发,而是想在Pycharm的Docker容器中使用Python解释器。

当我在Pycharm中选择“添加Python解释器”时,得到以下选项:

enter image description here

Pycharm的documentation建议使用如下所示的“添加Python解释器/ Docker”工具:

enter image description here

但是文档没有说明如果Docker位于远程计算机上,如何设置Docker容器和连接。

所以我的问题是:我应该使用Unix还是TCP套接字连接到远程docker?还是应该以某种方式转发容器中的所有相关端口并使用“ SSH解释器”选项?如果是这样,我该如何设置呢?我是否首先要正确设置Docker容器?

在过去的两天里,我认为我已经浏览了每个论坛和在线资源,但并没有进一步使它起作用。我也尝试过让它在Spyder中工作,但也无济于事。因此,任何建议都非常感谢!

非常感谢!

1 个答案:

答案 0 :(得分:1)

感谢您在漫画中如此尖锐而清晰地描述了困境:-)。我和我的同事正在尝试做一些类似的事情,最终效果很好的是直接从远程机器跳转到 Docker 容器创建 SSH 配置,然后将其设置为远程 SSH 解释器,这样 pycharm 甚至没有意识到这是一个Docker 容器。它也适用于 vscode。

  1. 在 docker 容器中设置 ssh 服务(https://dev.to/s1ntaxe770r/how-to-setup-ssh-within-a-docker-container-i5i 中的步骤子集,不需要 port22 的东西)
    • docker exec -it <container> bash:为 docker 创建管理员交互提示
    • apt-get install openssh-server
    • service ssh start
    • service ssh status 确认 -> * sshd is running
  2. 确定 IP 并测试从远程机器到容器的 SSH 连接(改编自 https://phoenixnap.com/kb/how-to-ssh-into-docker-container,步骤 2 和 3)
    • 从远程机器上的正常命令提示符(不在容器内):docker inspect -f "{{ .NetworkSettings.IPAddress }}" <container> 获取容器 IP
    • 测试:ping -c 3 <container_ip>
    • ssh: ssh <container_ip>;应该将您作为用户放入容器中;但是,需要正确配置容器(docker run cmd 具有 -v /etc/passwd:/etc/passwd:ro \ 等)。它可能会要求输入密码。注意:如果您稍后为分配了相同 IP 的不同容器执行此操作,您将收到警告并且可能需要从 known_hosts 中删除之前的键;只需按照警告中的说明进行操作即可。
  3. 从本地机器测试 SSH
    • 如果您还没有设置,请使用 docker 容器为远程机器设置基于 ssh 密钥的无密码身份验证
    • 使用远程机器作为容器跳转服务器的 SSH 命令:ssh -J <remote_machine> <container_ip>,如 https://wiki.gentoo.org/wiki/SSH_jump_host; 中所述,如果成功,您应该像从远程机器一样进入容器< /li>
    • 将此设置保存在您的 ~/.ssh/config 中;从https://wiki.gentoo.org/wiki/SSH_jump_host
    • 跟随ProxyJump Example
    • 使用 ssh <container_host_name_defined_in_ssh_config> 测试配置;也应该让你进入交互式容器
  4. 配置pycharm(或vscode或任何接受远程SSH解释器的IDE)
    • Preferences -> Project -> Python Interpreter -> Add -> SSH Interpreter -> New server configuration
    • 主持人:<container_host_name_defined_in_ssh_config>
    • 端口:22
    • 用户名:<username_on_remote_server>
    • 选择解释器,可以使用文件夹图标进行导航,这将引导您浏览泊坞窗中的路径,或者您可以从容器中输入 which python 的结果
    • 按照 pycharm 提示