本教程解决了Ubuntu服务器中的docker容器远程访问问题。
参考文章vscode通过ssh连接远程服务器中的容器
背景
容器作为一个虚拟环境独立运行在服务器中,服务器可以通过vscode、SSH、vnc 等远程方式直接访问容器,但本地主机则需要先连接服务器再通过上述方式连接。这里通过端口映射解决了这一问题,即通过端口映射一步访问远程服务器中的Docker容器。
在这里解释一下三个主机,由于本教程针对Ubuntu服务器中的docker容器,因此在这里定义三台主机。
本地主机 | 远程服务器主机 | Dcoker容器 |
---|---|---|
主机 | 服务器 | 容器 |
下面会对应更新三个主机之间的关系。
服务器docker安装及环境配置
见前文 ubuntu docker配置cuda+anaconda+vscode+tensorflow环境的镜像
服务器端口映射
在启动容器之前加上端口映射
sudo docker run --gpus all -it -u 0 --name=zhl --privileged=true -p 8022:22 -p 8080:8080 -p 8060:8060 -p 8081:8081 -v /data1/AI-DEM:/data zhl-of7:v1 bash
# -p 端口映射 本地端口:容器端口
# -v 挂载目录 本地目录:容器目录
安装ssh服务
apt-get install openssh-server #安装openssh-server
ps -e | grep ssh #查看ssh服务是否启动
service ssh start # 启动ssh服务
apt install net-tools #安装网络服务
ifconfig
# 172.17.0.2
vim /etc/ssh/sshd_config
Port 8080
PermitRootLogin yes
/etc/init.d/ssh restart
passwd #修改密码
# sudo ssh root@172.17.0.2 -p 8080
至此服务器可以通过ssh连接容器,同时本机可以通过端口映射访问服务器的8080端口,从而映射到容器8080端口(已经在上面设置为ssh的端口),于是连接方式变为:
服务器 连接示意图
本机连接示意图
服务器 vscode docker
本机 vscode 配置
挂载目录无权限的问题
ls -al 挂载目录
#drwxrwxr-x 3 zhl zhl 4096 9月 2 13:28 AI-DEM
#发现少一个w的权限
chmod a+rwx 挂载目录
#增加写的权限
``