方法一:使用ssh服务远程连接容器

0. 前提条件

  • 本地windows或其他环境中安装了Vscode,Vscode中安装了Remote-SSH拓展(用于利用SSH连接docker容器)
  • 远程服务器中安装了docker,并且拉取了自己需要的镜像(image)
  • 有root权限,能使用sudo命令

完成以下过程,可以像本地开发一样,对容器进行开发和测试。

1. 在服务器端启动Docker容器

docker run -itd -p 10008:10008 -v /dev/shm:/dev/shm --name huawei  --runtime=nvidia swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu-cuda11.1:1.10.1 /bin/bash
  • 1
  • -itd: 分别表示以交互式模式、分离模式(在后台运行)以及为容器分配一个终端。
  • -p 10008:10008: 这将主机的端口 10008 映射到容器的端口 10008,以便可以通过主机的端口访问容器内的服务。 重点配置,同时用于后续VScode访问。
  • -v /dev/shm:/dev/shm: 这将主机的 /dev/shm 目录挂载到容器的 /dev/shm 目录,为了共享内存可以不指定
  • –name huawei: 这为容器指定了一个名称,即 “huawei”。
  • –runtime=nvidia: 这表示使用 NVIDIA GPU 的运行时。一般项目可不指定
  • swr.cn-south-1.myhuaweicloud.com/mindspore/mindspore-gpu-cuda11.1:1.10.1: 这是容器镜像的名称和版本,指定了使用的 MindSpore 版本。
  • /bin/bash: 这是在容器中要运行的命令,即启动一个 Bash shell。

2. 进入刚刚启动的docker容器

# 查看正在运行的镜像
docker ps -s
# 进入docker容器
docker exec -it <容器ID> /bin/bash

vscode 通过docker插件 连接远程 2375 vscode远程连接服务器docker_服务器

3. 在容器中安装SSH服务

apt-get update
apt-get install openssh-server
apt-get install openssh-client
apt-get install ssh
apt-get install vim
  • 接着修改ssh文件信息,将容器的10008端口暴露出来允许root用户使用ssh登录
vim /etc/ssh/sshd_config

# 在刚刚打开的文件里添加以下内容,保存后退出:
Port 10008
PermitRootLogin yes #允许root用户使用ssh登录
  • 重启ssh服务
/etc/init.d/ssh restart

  • 设置root用户连接密码
passwd

4. 在容器中设置开机自启动SSH服务

  • 在 Docker 容器内运行 SSH 服务时,当容器停止后 SSH 服务会随之关闭,而当容器重新启动后 SSH 服务默认情况下不会自动重启。这是因为 Docker 容器本身是一个隔离的环境,容器内的服务与主机环境是相互独立的。本操作可以用以解决restart容器后使ssh自动启动,从而不影响远程连接。
# 找到并打开文件/root/.bashrc
$ vim /root/.bashrc
# 在.bashrc末尾添加如下代码
$ service ssh start

5. 在VScode中进行配置,连接docker

  • 在vscode中shfit+ctrl+p,输入如下字符,配置ssh文件(vscode需安装remote-ssh拓展)
Open ssh

vscode 通过docker插件 连接远程 2375 vscode远程连接服务器docker_bash_02

  • 在Configuration中添加:
Host <name>
  HostName <服务器IP>
  Port 10008
  User root
  ForwardAgent yes

vscode 通过docker插件 连接远程 2375 vscode远程连接服务器docker_bash_03

  • 此时可以通过Vscode连接远程服务器的10008端口,由于在启动容器时,设置了端口映射,所以在连接服务器10008端口后,服务器将自动转发到容器的10008端口。
  • 点击左下角蓝色图标,选择connect remote host
  • 选择刚刚加入的配置HOST,输入密码进入容器内部

    此时已经进入容器内部,可以像在本地和远程服务器一样进行容器内部的开发与测试了。后续可以将测试完成的容器重新打包为镜像。

在docker中创建.ssh免密登陆

ssh-keygen -t rsa

进入.ssh

touch authorized_keys

将本机公钥填入



方法二:使用Vscode中的Docker拓展,基于服务器访问容器

0. 前提条件

1. 即可以查看和修改容器信息

vscode 通过docker插件 连接远程 2375 vscode远程连接服务器docker_Docker_04