【VS Code】使用 VS Code 登陆远程服务器上的 Docker 容器

以下命令默认已经构建了一个 Docker Image。 

# 在服务器上启动 docker (-p 端口映射,用于后续的 ssh 连接)
docker run -itd -v /mnt/mount/:/home -p 8124:22 --name container-name --gpus all image-name

# 进入容器中
docker exec -it container-name /bin/bash

# 设置密码,后续登陆使用,比如 admin
passwd

# 查看 ssh 状态(出现 ssh: unrecognized service 表示 ssh 未安装)
service ssh status 

# 安装 ssh
apt-get update
apt-get install openssh-server

# 启动 ssh (出现 * Starting OpenBSD Secure Shell server sshd 表示启动成功)
service ssh start 

# 打开 ssh 配置文件进行修改,并重启
vi /etc/ssh/sshd_config
```
# 修改 PermitRootLogin 和 UsePAM 
#PermitRootLogin prohibit-password
PermitRootLogin yes 
# UsePAM yes
UsePAM no  
```
service ssh restart

# 在服务器上进行连接测试,输入上面设置的密码 admin,登陆成功则没问题
ssh root@127.0.0.1 -p 8124
# vscode 登陆此容器只需要把上面的 127.0.0.1 换成服务器 ip 即可

上述的步骤主要是在服务器上启动了一个docker容器,并在容器内安装和配置了ssh服务。以下是对于这些步骤的详细解释:

首先,使用 docker run 命令在服务器上启动了一个名为 container-name 的容器。这里使用了 -v /mnt/mount/:/home 参数将服务器上的 /mnt/mount/ 目录映射到容器的 /home 目录。另外,-p 8124:22 参数表示将容器的22端口(ssh默认端口)映射到服务器的8124端口,这样后续可以通过ssh协议连接到容器。--name container-name --gpus all 参数为容器指定了一个名字和GPU的使用权限。最后的 image-name 是要运行的docker镜像名称。

接着,使用 docker exec -it container-name /bin/bash 命令进入了容器的交互式shell。在此命令中,-it 参数表示保持交互,并分配一个伪终端。/bin/bash 是要执行的shell命令,即启动bash shell。

在容器内,使用 passwd 命令设置了密码,这个密码将用于后续的ssh登陆。

为了确认ssh是否已经在容器内安装,使用 service ssh status 命令检查ssh服务的状态。如果未安装ssh服务,将会出现 unrecognized service 的提示。

如果ssh未安装,则使用 apt-get update 和 apt-get install openssh-server 命令来安装ssh服务。

安装完成后,使用 service ssh start 命令启动ssh服务。如果一切正常,将会看到 Starting OpenBSD Secure Shell server sshd 的提示,表示ssh服务已经成功启动。

为了修改ssh的配置,首先使用 vi /etc/ssh/sshd_config 命令打开配置文件。在配置文件中,修改了 PermitRootLogin 和 UsePAM 的设置。PermitRootLogin yes 表示允许root用户登录,而 UsePAM no 则表示不使用Pluggable Authentication Modules。修改后,使用 service ssh restart 命令重启ssh服务以应用新的配置。

最后,为了测试ssh连接是否正常,使用 ssh root@127.0.0.1 -p 8124 命令尝试连接到容器。在输入密码后,如果能正常登陆,就表示ssh连接没有问题。对于VSCode的远程连接也是同样的方式,只需要将上述命令中的 127.0.0.1 换成服务器的实际IP地址即可连接到VSCode。

以上就是在服务器上启动docker容器,并在容器内安装和配置ssh服务的全过程。

  • Docker 其他启动方式
# 与主机共享网络
docker run -itd --network host --rm -v /mnt/:/mnt/ --gpus all --name torch -w /root nvcr.io/nvidia/pytorch:22.12-py3

# 多端口映射
docker run -itd --rm -v /mnt/:/mnt/ -p 8125:22 -p 9000-9010:9000-9010 --gpus all --name torch2 -w /root nvcr.io/nvidia/pytorch:22.12-py3