通过 SSH 远程连接 docker 容器

文章目录

一、容器端口映射

  1. 在启动容器前,通常会将 docker 容器中的 ssh 的默认端口与宿主机端口之间进行映射。
  2. 通常使用 docker run 命令来指定宿主机和容器之间的端口映射docker run -d -p <host_port>:<container_port> <image_name>-p 指定 宿主机端口容器端口 之间的关系,ssh 默认端口号是 22 ,如果不知道宿主机哪个端口是空闲的,可以指定 -p :22 ,让 docker 随机选择 一个宿主机的端口映射到容器的 22 端口,并且输出被选择的端口。端口号必须是 1 到 65535 之间的有效数字。
  3. 如果在 run 的时候指定了-net=host ,直接使用主机的网络栈,docker会忽略端口映射,因为容器直接使用主机的网络接口,不需要做端口映射。
  4. 启动容器后的映射结果:0.0.0.0:7777->22/tcp, :::7777->22/tcp ,其中0.0.0.0:7777->22/tcp 表示将宿主机的 IPv4 地址上的 7777 端口映射到容器的 22 端口。:::7777->22/tcp 表示将宿主机的 IPv6 地址上的 7777 端口映射到容器的 22 端口。
  5. 这样,在宿主机的所有网络接口 (包括 IPv4 和 IPv6)上监听 7777 端口。无论是从 IPv4 还是 IPv6 地址进行连接,都能够访问容器的 22 端口。

二、安装并启动SSH服务

  1. 启动 docker 容器之后,需要确保容器安装并启动了ssh 服务端才能远程连接。

    bash 复制代码
    apt update
    apt install -y openssh-server  # 安装open-ssh的服务端
  2. 修改容器内配置文件 /etc/ssh/sshd_config,允许 ssh 服务正常工作,确保以下参数没有被注释,并设置为 yes

    bash 复制代码
    PermitRootLogin yes
    PasswordAuthentication yes
  3. 设置 root 用户密码:passwd root 并在容器内启动 ssh 服务:service ssh start

三、连接docker容器

  1. 如果是终端连接,使用ssh -p 7777 root@宿主机ip 并输入 root 用户密码即可进入容器。

  2. vs code 中一般编辑本地用户的 ssh 配置文件 (~/.ssh/config )并增加如下内容。

    bash 复制代码
    Host docker-container  # 随意名称
        HostName 127.0.0.1 # 宿主机ip
        Port 7777 # 端口映射
        User root # 容器用户名
  3. 通过配置好的主机名(docker-container )选择 Remote-SSH: Connect to Host 连接。

小结

上述内容均来自个人实践,具有个人习惯性,如有其他问题欢迎在评论区讨论,谢谢!!

相关推荐
热金鼠1 天前
Ubuntu 22.04 Docker 完整使用手册(1)
docker
热金鼠1 天前
Ubuntu 22.04 Docker 完整使用手册(2)
docker
天才测试猿1 天前
Jenkins+Docker自动化测试全攻略
自动化测试·软件测试·python·测试工具·docker·jenkins·测试用例
xiaobobo33301 天前
vscode+clangd打开头文件发现某些标识符不识别为“白色”语言模型识别为C++
vscode·识别头文件错误·标识符为白色·语言模型识别错误
JAVA学习通1 天前
《大营销平台系统设计实现》 - 营销服务 第8节:抽奖规则树模型结构设计
运维·决策树·docker·容器·责任链模式
一拳一个娘娘腔1 天前
Linux SSH免密登录:从“刷卡进门”到“刷脸通行”的完整指南
linux·运维·ssh
认真的薛薛1 天前
Terraform: AWS VPC+可SSH登录EC2
ssh·aws·terraform
无相孤君1 天前
我用 Docker + JunimoServer 搭了一个星露谷物语无头服,还顺手做了个本地管理面板
linux·游戏·docker·开源
爱吃龙利鱼1 天前
ubuntu2026.04部署k8s1.36版本的傻瓜式教程(注:运行时为docker,网络插件为calico)
运维·网络·笔记·docker·云原生·kubernetes
接着奏乐接着舞1 天前
vscode 给 Maven 启动的 JVM 加上 `-Dfile.encoding=UTF-8`
jvm·vscode·maven