通过端口映射访问远程服务器中的Docker容器

本教程解决了Ubuntu服务器中的docker容器远程访问问题。
参考文章vscode通过ssh连接远程服务器中的容器

背景

容器作为一个虚拟环境独立运行在服务器中,服务器可以通过vscode、SSH、vnc 等远程方式直接访问容器,但本地主机则需要先连接服务器再通过上述方式连接。这里通过端口映射解决了这一问题,即通过端口映射一步访问远程服务器中的Docker容器。

在这里解释一下三个主机,由于本教程针对Ubuntu服务器中的docker容器,因此在这里定义三台主机。

本地主机 远程服务器主机 Dcoker容器
主机 服务器 容器
主机 服务器 容器 ssh [email protected] vscode,vnc 虚线表示远程连接 SSH端口默认22 启动时连接 无法直接连接 主机 服务器 容器

下面会对应更新三个主机之间的关系。

服务器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 [email protected] vscode,vnc SSH端口默认22 启动时连接 vscode,vnc 共享挂载目录文件,端口映射 (访问其中一个端口等于访问另外一个端口) 无法直接连接 主机 服务器 容器

安装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 [email protected] -p 8080

至此服务器可以通过ssh连接容器,同时本机可以通过端口映射访问服务器的8080端口,从而映射到容器8080端口(已经在上面设置为ssh的端口),于是连接方式变为:

主机 服务器 容器 ssh [email protected] (-p 22) ssh [email protected] -p 8080 ssh [email protected] -p 8080 注意这里用户名变为容器用户root 端口为映射的主机端口 主机 服务器 容器

服务器 连接示意图
在这里插入图片描述

本机连接示意图
在这里插入图片描述服务器 vscode docker

在这里插入图片描述

本机 vscode 配置
在这里插入图片描述

挂载目录无权限的问题

ls -al 挂载目录
#drwxrwxr-x  3 zhl  zhl   4096 9月   2 13:28 AI-DEM
#发现少一个w的权限
chmod a+rwx 挂载目录
#增加写的权限
``

猜你喜欢

转载自blog.csdn.net/qq_43488795/article/details/126658342