很多新手小白在做深度学习实验时,可能需要用Pycharm远程登录服务器中的docker容器,但是呢在配置时总是遇到各种各样的麻烦。我也曾被困扰过,但经过一段时间的摸索,总算弄清楚了配置的方法。

本文会详细介绍如何在docker容器内开启ssh服务,以便之后可以用Pycharm远程登录服务器中的docker容器,从而进行实验代码的调试或debug。
在这里插入图片描述

Step1

利用docker镜像(如centos),创建一个docker容器。这里要指定端口映射,必须要映射到容器内的22端口,否则无法用ssh登录容器。

docker run -it -p 3361:22 -p 3362:8888 centos /bin/bash

注意:这里的3361和3362端口你服务器需要开放,不然后面也会无法登录。我用的是阿里云服务器,是在防火墙中开放了这两个端口

Step2

安装 openssl, openssh-server 等工具

yum install -y openssl openssh-server

Step3

如果要正常启动ssh服务,/var/run/sshd 必须存在,手动创建并启动ssh服务:

mkdir -p /var/run/sshd
/usr/sbin/sshd -D & 

此时可能会出现如下报错:

在这里插入图片描述
解决方法:在docker容器内的命令行依次输入如下代码

ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''  
ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''

再次执行

/usr/sbin/sshd -D &

在这里插入图片描述
成功开启ssh服务

查看sshd是否监听22端口

yum install -y net-tools
netstat -apn | grep ssh

在这里插入图片描述

Step4

修改ssh配置文件

在docker容器内的命令行输入:vim /etc/ssh/sshd_config

设置ssh的端口:Port 22

在这里插入图片描述
附:如果你希望用3030端口登录docker的ssh,那么需要把Port改成3030

将 PermitRootLogin 的 no 改为 yes,即允许root用户登录

在这里插入图片描述

Step5

重启ssh服务

/usr/sbin/sshd -D &

用上面方法重启,可能还是无法用root登录

如果不行,可以换下面命令进行ssh重启

/etc/init.d/ssh restart

查看sshd是否监听22端口

在这里插入图片描述

Step6

给docker容器添加密码

我们必须要给docker容器设置密码,后面才能以ssh的方式登录容器

在容器内使用 passwd 命令创建密码,若没有这个命令,则用 yum install passwd 进行安装

在这里插入图片描述

实战演练

利用ssh直接登录docker容器

ssh root@10.11.6.14 -p 3361

这里的root指的是docker容器的root用户,不是服务器的用户名,密码是你上面设的docker容器的密码

Pycharm远程连接docker容器

在这里插入图片描述

常见问题:Connection refused

出现Connection refused大概率是因为你的docker容器被stop了,那ssh服务自然没有开启,那就不能登录

解决方法:docker start 容器,然后用 /etc/init.d/ssh restart 开启ssh服务

开启成功的话会显示下面内容

Restarting OpenBSD Secure Shell server sshd [OK]

2021/07/28 星期三 最新示例:使用我的镜像创建docker容器

镜像名:shwei/pytorch:1.0

我的这个shwei/pytorch:1.0镜像(14.5GB)包含了所有基础的配置,如vimrc,tmux, zshrc, aliases等
在这里插入图片描述
在这里插入图片描述

(1)运行下面命令创建容器:

docker run --gpus all -it -h tesla551 -p 3030-3050:3030-3050 --privileged=true -v /newhome/xxx/docker-data:/root/container-data --name=xxx shwei/pytorch:1.0 /bin/bash

(2)在docker容器内的命令行输入:vim /etc/ssh/sshd_config,设置ssh的端口:Port 3030

(3)启动ssh服务 (alias ressh):/etc/init.d/ssh restart

这时就可以用 ip:3030 端口登录docker容器

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐