技术实操
FinalShell 连不上 Docker 容器?搞懂这几招,管理容器不头疼!
很多朋友在用 FinalShell 管理服务器时,可能也遇到了一个问题:服务器上的 Docker 容器怎么在 FinalShell 里直接操作?这篇文章就来帮你解决这个困惑,分享一些实用小技巧,让你用 FinalShell 管理 Docker 容器更方便。
FinalShell 怎么连接 Docker 容器?
问:FinalShell 怎么连接到我的 Docker 容器?
答: FinalShell 默认是连接到你的服务器宿主机,而不是直接连接到 Docker 容器内部。如果你想在 FinalShell 里操作容器,通常有两种方式:
-
连接到宿主机,再进入容器: 这是最常见也是推荐的做法。首先,你需要在 FinalShell 中配置好 SSH 连接信息,确保能成功连接到运行 Docker 的那台服务器。如果你不清楚怎么配置 SSH,可以参考这篇教程:FinalShell SSH Key 配置指南。
连接成功后,在 FinalShell 的终端里,你可以使用
docker exec命令进入到特定的容器内部。操作步骤:
- 打开 FinalShell,双击你的服务器连接,或者点击“连接”按钮。
- 在弹出的终端窗口中,输入以下命令:
docker ps。这会列出所有正在运行的 Docker 容器,找到你想操作的容器 ID 或名称。 - 然后,使用
docker exec -it <容器ID或名称> /bin/bash(或/bin/sh,取决于容器内部的 shell)进入容器的命令行界面。例如:docker exec -it my-nginx-container /bin/bash。
这样,你就能在 FinalShell 的终端里,像在服务器上一样,直接对容器进行各种操作了。
-
容器内部运行 SSH 服务(不推荐): 某些特殊场景下,你可能会在 Docker 容器内部运行一个 SSH 服务。这种情况下,你可以直接像连接普通服务器一样,用 FinalShell 连接到容器的 SSH 端口。但这通常增加了容器的复杂性和安全风险,非必要不推荐。
问:怎么在 FinalShell 里看 Docker 容器的实时日志?
答: 实时查看 Docker 容器的日志对于开发调试。FinalShell 的终端功能非常强大,你可以直接使用 Docker 命令来做到。
操作步骤:
-
首先,确保你已经通过 FinalShell 连接到 Docker 宿主机。
-
在宿主机的终端中,输入
docker logs -f <容器ID或名称>命令。例如:docker logs -f my-web-app。 -
-f参数表示 “follow”,也就是持续跟踪日志输出。容器有新的日志产生时,FinalShell 的终端窗口会实时显示出来,非常方便调试。如果你只想看最近几行的日志,可以加上
--tail参数,比如:docker logs --tail 100 my-web-app,这会显示最新的 100 行日志。
问:Docker 容器里的文件,FinalShell 怎么传进去或取出来?
答: 文件传输是管理容器时经常遇到的需求。FinalShell 内置的 SFTP 功能和 docker cp 命令都能帮助你完成。
-
使用
docker cp命令: 这是最直接的方式,适用于在宿主机和容器之间传输文件。操作步骤:
- 通过 FinalShell 连接到你的 Docker 宿主机。
- 从宿主机复制文件到容器:
docker cp /宿主机路径/文件 容器ID或名称:/容器路径/例如:docker cp /home/user/my_config.conf my-nginx-container:/etc/nginx/conf.d/ - 从容器复制文件到宿主机:
docker cp 容器ID或名称:/容器路径/文件 /宿主机路径/例如:docker cp my-nginx-container:/var/log/nginx/access.log /tmp/access.log
-
结合 FinalShell 的 SFTP 功能: 虽然 FinalShell 的 SFTP 无法直接访问容器内部,但你可以利用它来做中转。
操作步骤:
- 如果你想把本地文件传到容器里:先用 FinalShell 的 SFTP 功能(文件管理界面)把本地文件上传到宿主机上的某个临时目录(比如
/tmp)。具体操作可以参考:FinalShell SFTP 文件传输指南。 - 然后,切换到 FinalShell 的终端,使用上面的
docker cp命令把宿主机临时目录的文件复制到容器内部。 - 如果你想把容器里的文件取出来:先用
docker cp命令把容器里的文件复制到宿主机的一个临时目录。 - 再用 FinalShell 的 SFTP 功能,从宿主机的临时目录把文件下载到你的本地电脑。
- 如果你想把本地文件传到容器里:先用 FinalShell 的 SFTP 功能(文件管理界面)把本地文件上传到宿主机上的某个临时目录(比如
问:容器端口映射了,我怎么通过 FinalShell 访问?
答: Docker 容器通过端口映射将容器内部服务暴露到宿主机上,我们就可以通过宿主机的 IP 和映射的端口访问。 FinalShell 的端口转发功能可以帮你更灵活地访问这些服务,即使宿主机没有公网 IP,或者防火墙限制了直接访问,你也可以通过本地端口转发来解决。
操作步骤 (以 FinalShell 4.6.1 为例):
-
打开 FinalShell,连接到你的服务器宿主机。
-
在左侧连接列表找到你的服务器连接,右键点击,选择“端口转发”。
-
点击“添加”按钮,创建一条新的转发规则。
-
配置本地端口转发:
- 类型: 选择“本地”。
- 侦听端口: 填写你本地电脑上希望使用的端口,比如
8080。 - 目标主机: 填写
127.0.0.1(表示宿主机自身)。 - 目标端口: 填写 Docker 容器映射到宿主机上的端口,比如
80或8000。 - 描述:写一个方便记忆的名称,例如“访问Docker Nginx”。
-
点击“确定”保存设置,并确保这个转发规则是“开启”状态。
这样设置完成后,当 FinalShell 连接保持时,你就可以在本地浏览器中访问
http://localhost:8080,实际上就是通过 FinalShell 转发访问了宿主机上 Docker 容器的映射端口服务。更详细的端口转发玩法,可以看这篇:FinalShell 端口转发实用指南。
问:FinalShell SSH 连接 Docker 宿主机,老是断线怎么办?
答: 我之前就踩过一个坑,刚开始用 FinalShell 的时候,如果服务器长时间没操作,FinalShell 的 SSH 连接就会自动断开,这让人非常烦恼,尤其是正在进行 Docker 容器的部署或调试时。这通常是由于网络闲置超时引起的。
解决方案:
-
配置 FinalShell 的 KeepAlive: 这是最简单直接的方法。
操作步骤:
- 打开 FinalShell,点击顶部菜单栏的“工具” -> “选项”。
- 在弹出的“选项”窗口中,切换到“连接”或“SSH”相关设置(不同版本可能略有差异,以 FinalShell 4.6.1 为例,通常在“终端”或“高级”选项里)。
- 找到“KeepAlive”或“保持连接”的选项,勾选它,并设置一个合适的间隔时间(例如 300 秒,即 5 分钟),这样 FinalShell 会定时发送空数据包,保持连接活跃。
- 点击“确定”保存。
-
修改服务器 SSH 配置: 如果 FinalShell 的 KeepAlive 效果不佳,你可能需要调整服务器端的 SSH 配置。
操作步骤:
- 通过 FinalShell 连接到你的宿主机。
- 编辑 SSH 配置文件:
sudo vi /etc/ssh/sshd_config。 - 找到或添加以下两行(如果被注释掉了,请取消注释并修改值):
这表示服务器每 60 秒会向客户端发送一个消息,如果连续 3 次没有收到响应,就断开连接。这样设置后,SSH 连接至少能保持ClientAliveInterval 60 ClientAliveCountMax 360 * 3 = 180秒(3 分钟)的空闲时间。 - 保存文件并退出。
- 重启 SSH 服务以使配置生效:
sudo systemctl restart sshd(CentOS/Ubuntu) 或sudo service ssh restart(Debian/旧版系统)。
常见问题
FinalShell 可以直接管理 Docker Compose 服务吗?
答: FinalShell 本身并不直接提供 Docker Compose 的图形化管理界面,但你可以在 FinalShell 的终端里,像在服务器上一样,执行所有 Docker Compose 命令,例如 docker compose up -d 来启动服务,docker compose down 来停止服务。你可以先把 docker-compose.yml 文件通过 SFTP 上传到服务器,然后在终端里进入该文件所在的目录进行操作。
在 FinalShell 里面输入命令,感觉有点卡顿怎么办?
答: 如果 FinalShell 终端输入命令有卡顿感,可以尝试几个方法:
- 检查网络延迟: 可能是你本地网络到服务器的网络延迟较高。你可以
ping一下服务器 IP 看看延迟情况。 - 调整 FinalShell 终端设置: 在 FinalShell 的“工具” -> “选项” -> “终端”中,可以尝试调整渲染模式或字体设置,有时能改善性能。
- 检查服务器负载: 如果服务器本身负载很高,响应速度也会变慢。可以通过
top或htop命令在 FinalShell 终端里查看服务器资源使用情况。

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