开发工具与技巧
FinalShell 玩转 Docker 容器?这些连接和管理小技巧你得知道!
很多朋友可能只把 FinalShell 当成一个普通的 SSH 终端工具,殊不知它在管理 Docker 容器时也能发挥大作用。今天我就来跟大家聊聊,怎么用 FinalShell 更高效地操作你的 Docker 容器,解决你在开发调试中可能遇到的各种实际问题。
FAQ:FinalShell 管理 Docker 容器
FinalShell 怎么连接 Docker 容器?
要用 FinalShell 连接 Docker 容器,我们通常有两种主要方式:直接 SSH 到宿主机再进入容器,或者通过端口映射直接连接容器(如果容器有对外暴露 SSH 服务)。考虑到安全性和普遍性,我推荐第一种方式。
步骤一:连接到宿主机
首先,你需要用 FinalShell 连接到运行 Docker 的服务器(宿主机)。
- 打开 FinalShell,点击左上角的“文件夹”图标或“文件”菜单中的“新建会话”。
- 选择“SSH连接”。
- 在弹出的对话框中,填写你的宿主机IP地址、用户名(通常是
root或你的服务器管理用户)和密码(或选择密钥登录)。端口号通常是 22,除非你改过。 - 给这个连接起个名字,比如“我的Docker服务器”。
- 点击“确定”并连接。连接成功后,你会看到一个命令行终端界面。
我最近刚把我的 FinalShell 更新到 4.6.8 版本,操作界面更流畅了,这些基础连接步骤都和之前大同小异。
步骤二:进入 Docker 容器
连接到宿主机后,你就可以通过 docker exec 命令进入到 Docker 容器内部了。
- 在 FinalShell 的终端里,先输入
docker ps查看当前正在运行的容器列表,找到你想要进入的容器的CONTAINER ID或NAMES。 - 然后执行以下命令进入容器:
比如,如果你的容器名叫docker exec -it <容器ID或名称> /bin/bashmy-web-app,就输入docker exec -it my-web-app /bin/bash。如果/bin/bash不行,可以试试/bin/sh。
这样,你就成功地通过 FinalShell 连接并进入到 Docker 容器的命令行环境了!你可以在里面执行各种命令,就像在容器内部操作一样。

连接 Docker 容器失败了,我该怎么排查?
这可是个老生常谈的问题,我也踩过不少坑。如果你在 FinalShell 连接 Docker 容器时遇到问题,通常是以下几个方面出了岔子:
-
SSH 连接宿主机失败:
- IP地址或端口错误:检查你输入的宿主机 IP 地址和 SSH 端口(默认为 22)是否正确。
- 用户名或密码错误:确认你的 SSH 登录凭据是正确的。多输一个空格都可能导致失败。
- 防火墙阻挡:这是我最常遇到的问题!确保宿主机的防火墙(如
firewalld或ufw)允许 22 端口的入站连接。你可以尝试在宿主机上运行sudo systemctl status firewalld或sudo ufw status检查状态,并相应地开放端口。例如,sudo firewall-cmd --zone=public --add-port=22/tcp --permanent后sudo firewall-cmd --reload。 - SSH 服务未运行:确保宿主机上的 SSH 服务(
sshd)正在运行。在宿主机上执行sudo systemctl status sshd检查。
如果排查SSH连接遇到困难,可以参考这篇FinalShell连接SSH服务器问题排查指南。
-
docker exec命令执行失败:- 容器未运行:使用
docker ps -a检查容器是否处于运行状态。如果容器已经停止,你需要先docker start <容器ID或名称>。 - 容器ID或名称错误:仔细核对你输入的容器 ID 或名称是否准确无误。
/bin/bash或/bin/sh不存在:有些轻量级容器可能没有安装bash,可以尝试docker exec -it <容器ID或名称> sh。
- 容器未运行:使用
用 FinalShell 怎么查看 Docker 容器日志和资源占用?
FinalShell 的命令行界面可以让你方便地执行各种 Docker 命令,来监控容器的状态。
-
查看容器日志:
- 进入宿主机终端后,使用
docker logs <容器ID或名称>命令来查看容器的输出日志。这对于调试应用程序非常有用。 - 如果你只想看最新的几行日志,可以使用
--tail参数,比如docker logs --tail 100 <容器ID或名称>。 - 如果想实时跟踪日志,加上
-f(follow) 参数:docker logs -f <容器ID或名称>。
- 进入宿主机终端后,使用
-
查看容器资源占用:
- 使用
docker stats命令可以实时查看所有运行中容器的 CPU、内存、网络 I/O 等资源使用情况。这个命令会动态刷新,非常直观。 - 如果只想看特定容器的资源,可以指定容器名称或 ID:
docker stats <容器ID或名称>。
- 使用
怎么用 FinalShell 快速上传下载 Docker 容器里的文件?
FinalShell 强大的文件管理功能可以与 docker cp 命令结合,实现容器内外文件的快速传输。
- 通过宿主机中转:
- 上传文件到容器:
- 首先,使用 FinalShell 的 SFTP 功能(文件管理器)将本地文件上传到宿主机上的某个临时目录(比如
/tmp)。你可以直接拖拽文件到 FinalShell 的文件列表界面,非常方便。 - 然后,在 FinalShell 的终端中,使用
docker cp命令将宿主机上的文件复制到容器内:
比如,docker cp /tmp/your_file.txt <容器ID或名称>:/path/in/container/docker cp /tmp/config.json my-web-app:/app/config.json。
- 首先,使用 FinalShell 的 SFTP 功能(文件管理器)将本地文件上传到宿主机上的某个临时目录(比如
- 从容器下载文件:
- 在 FinalShell 的终端中,使用
docker cp命令将容器内的文件复制到宿主机上的某个临时目录:
比如,docker cp <容器ID或名称>:/path/in/container/your_file.txt /tmp/docker cp my-web-app:/var/log/app.log /tmp/app.log。 - 接着,通过 FinalShell 的 SFTP 功能,从宿主机的
/tmp目录将文件下载到你的本地电脑。同样,拖拽即可。
- 在 FinalShell 的终端中,使用
- 上传文件到容器:
这个流程虽然看起来多了个中转步骤,但 FinalShell 的图形化文件管理让操作变得非常简单,比纯命令行方便太多了。
如果你对FinalShell的SFTP文件传输功能还不太熟悉,可以看看这篇FinalShell SFTP文件传输实用指南,里面有更详细的图文教程。
FinalShell 能不能直接在容器里运行简单的开发脚本?
当然可以!一旦你通过 FinalShell 连接并进入了 Docker 容器的命令行环境,你就可以像在任何 Linux 终端一样,直接运行各种命令和脚本,进行简单的开发调试。
- 编写和修改脚本:
- 你可以在容器内直接使用
vi或nano(如果安装了)等文本编辑器来编写或修改脚本文件。 - 例如:
vi my_script.sh,然后输入脚本内容。
- 你可以在容器内直接使用
- 赋予执行权限:
- 保存脚本后,你需要给它执行权限:
chmod +x my_script.sh。
- 保存脚本后,你需要给它执行权限:
- 运行脚本:
- 直接执行脚本:
./my_script.sh。
- 直接执行脚本:
这对于快速测试一些功能、部署简单的更新或者运行一些维护任务非常方便。比如,我经常用它在容器里跑一些数据库迁移脚本或者检查配置文件的工具。它就像一个远程的 IDE 终端,让你能更贴近生产环境进行开发和测试。
常见问题
FinalShell 的进程管理功能对 Docker 容器有用吗?
FinalShell 的“进程”功能主要是针对宿主机上的进程进行管理。当你通过 docker exec 进入容器后,容器内的进程是独立的。虽然你可以在 FinalShell 终端内使用 ps aux 等命令查看容器内部进程,但 FinalShell 自带的图形化进程管理界面并不能直接显示和操作 Docker 容器内的进程。不过,它可以让你监控宿主机上的 Docker 守护进程(dockerd)的状态,这对于判断 Docker 服务是否正常运行还是有帮助的。
FinalShell 能不能用来做 Docker 容器的端口转发?
FinalShell 本身并没有直接针对 Docker 容器的端口转发功能。但是,你可以利用 FinalShell 的 SSH 隧道(端口转发)功能来间接实现。如果你想访问一个没有直接暴露端口但运行在 Docker 容器内的服务,你可以通过 SSH 隧道将宿主机的某个端口转发到本地,然后再从本地连接到该端口。但这需要在宿主机层面配置,而不是在 FinalShell 内部直接针对容器进行配置。比如,可以利用 FinalShell 的本地端口转发功能,将本地端口转发到宿主机的某个端口,而这个宿主机端口又被 Docker 容器映射出来。如果你想了解更多关于 SSH 端口转发的知识,可以查看这篇FinalShell 端口转发(SSH 隧道)终极指南。
延伸阅读
若需进一步查阅,可先看本站以下教程: