将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 加速的计算性能
相关推荐
劳埃德福杰13 小时前
【Kylin银河麒麟】文件系统磁盘空间满导致无法进入操作系统
运维·服务器·电脑·笔记本电脑·kylin
kishu_iOS&AI13 小时前
PyCharm 结合 uv 进行 AI 大模型开发
人工智能·pycharm·大模型·uv
逻辑峰13 小时前
ReadStat在Linux的安装和使用
linux·运维·服务器
Lsir10110_14 小时前
【Linux】序列化与反序列化——网络计算器的实现
linux·运维·网络
脆皮的饭桶14 小时前
给负载均衡做高可用的工具Keepalived
运维·服务器·负载均衡
袁小皮皮不皮14 小时前
【HCIA】第三章TCP/IP协议栈中其他主要协议
运维·服务器·网络·网络协议·tcp/ip
头孢头孢14 小时前
效率提升 10 倍!我用 OpenClaw 实现了工作自动化
运维·自动化
Agent产品评测局14 小时前
中国龙虾ai软件有哪些选择?2026自动化选型指南
运维·人工智能·ai·chatgpt·自动化
思麟呀14 小时前
应用层自定义协议与序列化
linux·运维·服务器·网络·c++
Lost_in_the_woods14 小时前
Java程序员的Linux之路——命令篇
linux·运维·服务器