开发工具

FinalShell 搞不定 Docker 容器?SSH 连接和调试的几个小技巧!

2026-07-07 · FinalShell

FinalShell 搞不定 Docker 容器?SSH 连接和调试的几个小技巧! 配图

FinalShell 是很多开发者管理服务器的利器,但第一次用它连接 Docker 容器或者进行 SSH 调试时,可能遇到不少小麻烦。比如连接不稳定、文件传输慢、或者不知道怎么进行端口转发来调试应用。这篇实操帖就是来帮你解决这些问题的,让你轻松搞定 Docker 容器的管理和调试,提升开发效率。

FinalShell 如何连接 Docker 容器的 SSH 服务?

如果你在 Docker 容器镜像中内置或已安装 SSHD 服务,即可用 FinalShell 连接。

操作步骤:

  1. 获取连接信息:
    • 端口映射: 如果 Docker 容器在启动时做了端口映射,例如 docker run -p 2222:22 ...,那么可以通过宿主机的 2222 端口连接容器的 22 端口。
    • 容器 IP: 如果没有端口映射,或容器与宿主机在同一 Docker 网络,可以用 docker inspect <容器ID或名称> 命令查找容器的 IP 地址。
  2. FinalShell 新建 SSH 连接:
    • 打开 FinalShell 客户端(我这里以 4.6.1 版本为例),点击左上角的“连接”按钮,选择“新建SSH连接”。
    • 在弹出的窗口中,填写以下信息:
      • 名称: 给连接起一个好记的名字。
      • 主机: 填写宿主机的 IP 地址(如果做了端口映射)或者容器的 IP 地址。
      • 端口: 填写映射后的宿主机端口,或者容器的 SSHD 端口(通常是 22)。
      • 用户名: 容器内 SSH 服务的用户名(如 root)。
      • 密码: 对应用户的密码。
  3. 连接: 点击“确定”保存后,双击列表中的连接项。如果连接失败,请检查 IP、端口、用户名、密码是否正确,以及容器内的 SSHD 服务是否正常运行。

FinalShell 连接 Docker 容器为何总是中断或很慢?

FinalShell 连接 Docker 容器出现中断或速度慢,多半不是 FinalShell 本身问题,而是源于宿主机、容器网络或容器内部环境。

排查方法:

  1. 网络问题: 检查宿主机到容器的网络是否稳定。可以尝试在宿主机上 ping 容器 IP,或者检查 Docker 的网络配置。
  2. 容器资源不足: 如果容器运行的应用非常占用 CPU 或内存,可能导致 SSHD 服务响应缓慢甚至卡死。你可以通过 docker stats 命令查看容器的资源使用情况。我踩过一个坑,有次连接 Docker 容器 SSH 老断线,后来发现是服务器内存不足,容器被 OOM Kill 了。所以,除了网络,服务器负载也得关注。
  3. SSH KeepAlive 设置: 在 FinalShell 的连接设置里,有一个“高级”选项,可以设置“保持连接”的心跳时间。如果你经常遇到空闲时断开连接,可以把这个时间调短一些,比如每 30 秒发送一个心跳包,能有效防止连接自动关闭。
  4. 宿主机防火墙: 确保宿主机的防火墙(如 firewalld 或 ufw)没有阻断到容器 SSH 端口的连接。

FinalShell 如何方便调试 Docker 容器内应用?

在 Docker 容器内部调试应用程序,通常会用到端口转发。FinalShell 提供了非常方便的端口转发功能,可以将容器内部的服务端口映射到本地机器,这样你就可以直接在本地使用 IDE 或调试器连接到容器内的服务进行调试。

操作步骤:

  1. 确定服务端口: 首先,你需要知道你的应用程序在 Docker 容器内监听的是哪个端口。比如,一个 Java 应用可能监听 8080 端口。
  2. 配置端口转发:
    • 在你已建立的 Docker 容器 SSH 连接上右键,选择“属性”。
    • 切换到“端口转发”选项卡。
    • 点击“添加”,选择“本地端口转发”。
    • 填写:名称、监听地址 (通常 127.0.0.1)、监听端口 (本地机器上你希望使用的端口,如 8080)、目标地址 (容器的 IP 地址)、目标端口 (容器内应用程序监听的端口,如 8080)。
    • 勾选“启用”,然后点击“确定”保存。
  3. 启动本地调试器: 配置完成后,只要 FinalShell 的 SSH 连接是活跃的,你就可以在本地机器上,通过 localhost:8080 (这里以端口 8080 为例) 来访问容器内运行的服务了。这意味着你可以用 VS Code、IntelliJ IDEA 等 IDE 的远程调试功能,直接连接到你的本地转发端口,从而实现对容器内应用程序的断点调试。

更多关于端口转发的详细设置,可以参考这篇教程:FinalShell 端口转发配置指南。

FinalShell 怎么快速传输 Docker 容器文件?

FinalShell 集成了强大的 SFTP 功能,让你无需额外的工具就能方便地在本地和 Docker 容器之间拖拽传输文件。

操作步骤:

  1. 连接容器: 确保你的 FinalShell 已成功连接到 Docker 容器的 SSH 服务。
  2. 使用 SFTP 面板: 连接成功后,FinalShell 窗口左侧会显示一个文件浏览器面板,这就是 SFTP 功能区。左侧是远程服务器(这里是你的 Docker 容器)的文件系统,右侧是你的本地文件系统。
  3. 文件传输:
    • 上传: 直接从右侧的本地文件系统,拖拽文件或文件夹到左侧的容器文件系统中的目标路径。
    • 下载: 从左侧的容器文件系统,拖拽文件或文件夹到右侧的本地文件系统中的目标路径。
    • 其他操作: 你也可以在文件浏览器中右键点击文件或文件夹,进行新建、删除、重命名等操作。

SFTP 传输的体验非常流畅,特别适合在开发过程中频繁修改配置文件或者上传部署包。如果你想了解更全面的文件传输技巧,可以查看这篇文章:FinalShell SFTP 文件传输详细教程。

FinalShell 如何配置 SSH 密钥实现 Docker 容器免密登录?

每次输入密码连接 Docker 容器 SSH 可能会很麻烦,尤其是在需要频繁连接多个容器时。使用 SSH 密钥对实现免密登录是一种更安全、更高效的方式。

操作步骤:

  1. FinalShell 生成密钥对:
    • 打开 FinalShell,点击顶部菜单栏的“工具” -> “SSH密钥生成器”。
    • 选择 RSA 或 ECDSA 算法,设置密钥长度,然后点击“生成”。
    • 生成后,点击“保存公钥”和“保存私钥”按钮,将密钥文件保存到本地。私钥文件通常是 .pem 或 .ppk 格式。
  2. 公钥复制到容器:
    • 用 FinalShell 的密码连接方式登录到你的 Docker 容器。
    • 在容器内,创建 .ssh 目录(如果不存在):mkdir -p ~/.ssh && chmod 700 ~/.ssh。
    • 将刚才生成的公钥内容(通常以 ssh-rsa ... 开头的那一大段文本)追加到容器的 ~/.ssh/authorized_keys 文件中。别忘了设置文件权限:chmod 600 ~/.ssh/authorized_keys。
  3. FinalShell 连接配置私钥:
    • 右键你的 Docker 容器 SSH 连接,选择“属性”。
    • 在“认证”选项卡中,选择“密钥认证”。
    • 点击“私钥文件”旁边的文件夹图标,选择你之前保存的私钥文件。如果你的私钥设置了密码(passphrase),请一并填入。
  4. 测试: 保存设置后,再次尝试连接你的 Docker 容器。现在应该无需输入密码就能直接登录了。

SSH 密钥的配置方法在管理多个服务器时尤其有用,也能提高连接的安全性。更详细的密钥配置指南,可以参考这篇:FinalShell SSH 密钥配置教程。

FinalShell SSH连接Docker容器示意图

常见问题

  • Docker 容器重启后 IP 变了怎么办? Docker 容器在重启后,其 IP 地址确实可能会发生变化。为了避免这个问题,你可以考虑以下解决方案:

    1. 宿主机端口映射: 始终通过宿主机 IP 和映射端口连接容器,而不是直接连接容器 IP。只要宿主机 IP 不变,映射端口不变,你的 FinalShell 连接配置就不需要修改。
    2. Docker Compose 或自定义网络: 在 docker-compose.yml 中定义服务时,可以给容器指定固定的 IP 地址或者使用服务名进行容器间通信,但这通常配置较复杂,需要一定的 Docker 网络知识。
  • FinalShell 的终端字体显示不清楚,或者乱码? 这通常是字体配置问题。你可以在 FinalShell 的“工具”->“选项”->“终端”中,调整字体和编码设置:

    1. 字体: 选择一个等宽字体,比如“Consolas”、“Monaco”或“更纱黑体 (Sarasa Term SC)”等,并适当调大字号,以获得更好的阅读体验。
    2. 字符集: 大多数情况下,选择 UTF-8 编码可以解决中文乱码问题。如果你的服务器端系统是较老的版本,可能需要尝试 GBK 或 GB18030。

延伸阅读

若需进一步查阅,可先看本站以下教程: