将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 加速的计算性能
相关推荐
七夜zippoe3 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy6485 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满5 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠5 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey9035 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技6 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀7 小时前
Linux环境变量
linux·运维·服务器
zzzsde7 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º8 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~8 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化