将dockers通过远程ssh配置在pycharm中

在 Windows 系统中配置 PyCharm 连接 Docker GPU 容器的完整指南

概述

本文将详细介绍如何在 Windows 系统下,通过 SSH 将 PyCharm 连接到运行在 Docker 中的 NVIDIA PyTorch GPU 容器。这种方法可以让你在本地 PyCharm IDE 中使用远程容器中的 GPU 环境和 Python 解释器。

环境准备

  • Windows 10/11 操作系统
  • Docker Desktop for Windows(已安装并启用 WSL2)
  • NVIDIA 显卡驱动
  • Docker NVIDIA 容器工具包
  • PyCharm Professional 版本(社区版不支持远程解释器)

步骤一:启动并配置 Docker 容器

1.1 启动 PyTorch GPU 容器

打开 PowerShell 或 CMD,执行以下命令:

bash 复制代码
docker run -it --rm --name tests --gpus all -p 2222:22 1dc787f5c626 bash

参数说明:

  • -it:交互式终端
  • --rm:容器退出时自动删除
  • --name tests:容器名称
  • --gpus all:启用所有 GPU
  • -p 2222:22:将主机的 2222 端口映射到容器的 22 端口
  • 1dc787f5c626:PyTorch 镜像 ID
  • bash:启动 bash shell

1.2 在容器内安装和配置 SSH 服务

容器启动后,依次执行以下命令:

bash 复制代码
# 更新包列表
apt-get update

# 安装 SSH 服务器
apt-get install -y openssh-server

# 创建 SSH 运行时目录
mkdir -p /var/run/sshd

# 设置 root 密码(这里设置为 123456,生产环境请使用复杂密码)
echo 'root:123456' | chpasswd

# 允许 root 用户通过 SSH 登录
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# 启用密码认证
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config

1.3 启动 SSH 服务

bash 复制代码
/usr/sbin/sshd -D

注意:执行此命令后,终端会"卡住",这是正常的。SSH 服务正在前台运行,你需要保持这个窗口打开。可以最小化它,但不要关闭。

步骤二:PyCharm 配置

2.1 打开 PyCharm 设置

  1. 打开 PyCharm
  2. 点击菜单栏的 FileSettings (Windows/Linux)

2.2 添加 Python 解释器

  1. 在设置窗口中,导航到Python > Interpreter
  2. 点击当前解释器旁边的齿轮图标,选择 Add...

2.3 选择 SSH 解释器

  1. 在弹出的窗口中,选择 SSH Interpreter
  2. 点击 New... 创建新服务器配置

2.4 配置 SSH 连接

  1. 填写 SSH 连接信息:
    • Host : localhost
    • Port : 2222
    • Username : root
    • Password : 123456
  1. 点击 Next

2.5 配置解释器路径

  1. 在下一界面中,设置远程 Python 解释器路径:

    复制代码
    /usr/bin/python
  1. 同步文件夹设置(可选):
    • 本地项目路径会自动同步到容器中
    • 默认同步到容器的 /tmp/pycharm_project_xxx 目录
    • 可以点击文件夹图标修改同步路径

2.6 完成配置

  1. 点击 Finish,PyCharm 会测试连接
  2. 如果一切正常,你会看到容器中的 Python 包列表

步骤三:验证配置

3.1 验证 SSH 连接

打开新的 PowerShell 窗口,测试 SSH 连接:

bash 复制代码
ssh -p 2222 root@localhost

输入密码 123456,如果成功登录,说明 SSH 配置正确。

3.2 验证 GPU 可用性

在 PyCharm 中创建一个 Python 文件,运行以下代码:

python 复制代码
import torch

print(f"PyTorch版本: {torch.__version__}")
print(f"CUDA是否可用: {torch.cuda.is_available()}")
if torch.cuda.is_available():
    print(f"CUDA版本: {torch.version.cuda}")
    print(f"GPU名称: {torch.cuda.get_device_name(0)}")
    print(f"GPU数量: {torch.cuda.device_count()}")

运行后应该能看到类似以下输出:

复制代码
PyTorch版本: 2.5.0
CUDA是否可用: True
CUDA版本: 12.4
GPU名称: NVIDIA GeForce RTX 4090
GPU数量: 1

常见问题解决

问题1:SSH 连接失败

解决方案:

  1. 检查 Docker 容器是否在运行:docker ps
  2. 检查端口是否被占用,可以尝试更换端口,如 -p 2223:22
  3. 确认防火墙是否阻止了连接

问题2:PyCharm 无法同步文件

解决方案:

  1. 检查容器中的目标目录权限
  2. 在 PyCharm 的 ToolsDeploymentConfiguration 中重新配置部署

问题3:GPU 不可用

解决方案:

  1. 确保 Docker Desktop 中启用了 GPU 支持
  2. 检查 NVIDIA 容器工具包是否安装正确
  3. 重启 Docker Desktop

进阶配置

持久化容器配置

为了避免每次都要重新配置,可以创建 Dockerfile:

dockerfile 复制代码
FROM nvcr.io/nvidia/pytorch:25.12-py3

RUN apt-get update && \
    apt-get install -y openssh-server && \
    mkdir -p /var/run/sshd && \
    echo 'root:123456' | chpasswd && \
    sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
    sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config

EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

构建并运行:

bash 复制代码
docker build -t pytorch-ssh .
docker run -d --name pytorch-dev --gpus all -p 2222:22 pytorch-ssh

使用密钥认证(更安全)

  1. 生成 SSH 密钥对
  2. 将公钥添加到容器的 ~/.ssh/authorized_keys
  3. 在 PyCharm 中使用密钥认证

优点总结

  1. 本地开发体验:在熟悉的 PyCharm 界面中开发
  2. GPU 加速:充分利用本地 GPU 资源
  3. 环境隔离:避免污染本地 Python 环境
  4. 可重复性:Docker 容器确保环境一致性
  5. 便捷调试:支持 PyCharm 的完整调试功能

注意事项

  1. 安全警告:示例中使用简单密码,生产环境请使用复杂密码或密钥认证
  2. 资源占用:Docker 容器会占用磁盘空间和内存
  3. 网络问题:公司网络可能限制 Docker 使用
  4. 版本兼容:确保 PyCharm 和 Docker 版本兼容

结论

通过本文的配置,你可以在 Windows 系统上使用 PyCharm 无缝连接到 Docker 容器中的 GPU 环境,享受本地开发的便利性和容器化环境的优势。这种方法特别适合机器学习、深度学习开发,可以充分利用本地硬件资源,同时保持开发环境的整洁和一致性。


配置完成后的工作流程:

  1. 启动 Docker 容器并运行 SSH 服务
  2. 在 PyCharm 中连接到容器解释器
  3. 像本地开发一样编写和调试代码
  4. 代码会自动同步到容器中执行
  5. 享受 GPU 加速的计算性能
相关推荐
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.11 小时前
Haproxy ACL实战:精准分流与访问控制
运维
RockHopper202511 小时前
解读数字化生产运行系统的裁决机制
运维·系统架构·智能制造·isa-95·isa-88
guizhoumen11 小时前
2026年建站系统推荐及选项指南
大数据·运维·人工智能
yingdonglan12 小时前
鸿蒙跨端Flutter学习——GridView高级功能
linux·运维·windows
遇见火星12 小时前
在Linux中使用journalctl命令进行日志分析和管理详细教程
linux·运维·服务器·journalctl
xuefuhe12 小时前
RHEL9 yum install etcd Error: Unable to find a match: etcd
linux·运维·centos
我送炭你添花12 小时前
树莓派部署 GenieACS 作为终端TR-069 ACS(自动配置服务器)的详细规划方案
运维·服务器·网络协议
华农第一蒟蒻12 小时前
一次服务器CPU飙升的排查与解决
java·运维·服务器·spring boot·arthas
NGINX开源社区12 小时前
借助 Okta 和 NGINX Ingress Controller 实现 K8s OpenID Connect 身份验证
运维·nginx·kubernetes
郝亚军13 小时前
如何在windows11和Ubuntu linux之间互传文件
linux·运维·ubuntu