将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 加速的计算性能
相关推荐
Anakki5 分钟前
企业级 Elastic Stack 集成架构:Spring Boot 3.x 与 Elasticsearch 8.x 深度实践指南
运维·jenkins·springboot·elastic search
DevOps-IT11 分钟前
HTTP状态码(常见 HTTP Status Code 查询)
运维·服务器·网络·网络协议·http
释怀不想释怀17 分钟前
Docker(安装软件)
运维·docker·容器
网硕互联的小客服20 分钟前
服务器 CPU 温度过高需要进行的物理处理和软件处理有哪些?
运维·服务器
济61732 分钟前
linux(第十三期)--filezilla使用方法(实现ubuntu和windows11文件互传)-- Ubuntu20.04
linux·运维·ubuntu
HIT_Weston33 分钟前
91、【Ubuntu】【Hugo】搭建私人博客:侧边导航栏(五)
linux·运维·ubuntu
阿巴~阿巴~34 分钟前
从不可靠到100%可靠:TCP与网络设计的工程智慧全景解析
运维·服务器·网络·网络协议·tcp/ip·智能路由器
一殊酒44 分钟前
【Figma】Figma自动化
运维·自动化·figma
arthur.dy.lee1 小时前
在pycharm中使用powershell7解决conda,ohmyposh报错的问题
ide·pycharm·conda
食咗未1 小时前
Linux iptables工具的使用
linux·运维·服务器·驱动开发·网络协议·信息与通信